분류 전체보기
[Swift] Never타입과 fatalError()
Never 타입 제어권을 호출한 위치로 return하지 않는다. Never타입은 빈 열거형으로 선언되어있다. 빈 열거형이므로 인스턴스를 생성할 수 없다 ex) let day: Weekday = Weekday.monday // 인스턴스 생성 불가 let some = Never() // 생성 불가 ⭐️함수의 return의 의미⭐️ 함수의 결과로 만들어진 값을 리턴한다. 함수 내부로 전달된 CPU실행의 제어권을 함수를 호출한 부분으로 돌려준다. ❓일반적인 함수의 흐름 //코드위치 func addTwoNumbers(a: Int, b: Int) -> Int { //1 var c = a + b //2 return c //3 } //@main var num1 = 5 //4 var num2 = 3 //5 var num..
[UIKit] UICollectionView
UICollectionView 데이터 항목의 정렬된 컬렉션을 관리하고 커스텀한 레이아웃을 사용해 표시하는 객체 UITableVIew처럼 ScrollView를 상속받고있으며 다양한 레이아웃을 보여줄 때 사용 리스트 형태와 슬라이더 형태 모두 표현 가능하다. UICollectionView에 표시되는 모든 View는 UICollectionViewReuseableView의 인스턴스여야한다. UICollectionViewReuseableView는 컬렉션 뷰에서 사용중인 재사용 메커니즘을 지원한다. 매번 새 View를 만드는 대신에 이 View를 재사용해서 성능을 향상시키고 스크롤하는 동안에 성능적인 요소들이 향상되게된다. 이 부분은 tableview와 마찬가지이다. UICollectionView의 구성요소 Sup..
[Swift] CaseIterable 프로토콜
Enum 타입에서 사용할 수 있는 프로토콜이다 (Swift 5.2~) Iterable: 반복가능한 💥CaseIterable 채택시 아래의 타입 계산 속성이 자동으로 구현된다. static var allCases: Self.AllCases { get } 연관값이 있는경우 CaseIterable 프로토콜을 따르지 않아 구현할 수 없다.⭐️⭐️⭐️⭐️ ❗️원시값은 상관없음 구글링 해보면 방법이 있긴 하다고한다 😅 ❓allCases 타입 계산속성은 뭘 하는 놈일까? CaseIterable을 채택한 열거형의 모든 케이스를 가지고 있는 배열 CaseIterable 구현 예제 enum CompassDirection: CaseIterable { case north case south case east case west..
[Swift] Comparable 프로토콜
Equatable 프로토콜과 유사하다. 두 인스턴스에 대하여 아래의 연산자를 가능케한다. , = Comparable 프로토콜의 요구사항 static func Bool Equatable //클래스의 경우 ==는 무조건 구현해야함 static func == (lhs: Some, rhs: Some) -> Bool //다른 커스텀 타입의경우 모든 멤버가 Equatable을 따르다면 구현하지 않아도 됨 일반적으로 , = 연산자를 자동으로 구현해준다. Comparable 프로토콜은 Equatable프로토콜을 상속하고 있다. 그러므로 == 또한 구현해야한다. Int, Double, String 등은 Complable을 채택하고 있기 때문에 비교 연산이 가능하다 Com..
[Swift] Equatable 프로토콜
두 인스턴스를 비교하여 동일한지 확인할 수 있는 프로토콜이다. == , != 두 연산자는 같은지, 다른지를 확인할 수 있는 연산자다. Int와 Double형 등에서 ==와 !=를 사용해서 동일한지 동일하지 않은지 비교할 수 있었던 이유는 애플이 미리 Int와 Double에서 ==와 !=를 구현해 놨기 때문이다. 그렇기 때문에 동일성을 비교할 수 있었다. Equatable의 구현 요구사항 static func == (lhs: Self, rhs: Self) -> Bool Equatable의 구현 원칙⭐️ 1. 구조체, 열거형의 경우 Equatable프로토콜 채택시 모든 저장속성(열거형은 모든 연관값)이 Equatable프로토콜을 채택한 타입이라면 비교연산자(==, !=) 메서드 자동구현 2. 열거형의경우 연..
[Swift] 메모리 안전성(Memory Safety)
싱글 쓰레드 환경에서도 하나의 메모리에 동시적 접근이 발생 가능하다. 1. 메모리에 충돌하는 접근 이해 변수의 값을 설정하거나 함수에 인자를 전달하는 동작을 할 때 메모리에 접근하게 된다. var one = 1 // 쓰기 접근. print("We're number \(one)!") // 읽기 접근. 코드의 다른 부분이 같은 시간에 메모리의 같은 위치에 접근할 때 충돌이 발생할 수 있다. 메모리 접근의 특징 3가지 조건을 모두 만족하는 2개의 접근이 있다면 충돌이 발생한다. 적어도 하나는 쓰기 접근 (메모리 위치를 변경) 이거나 non-atomic (C atomic 연산이 아닌 것) 접근이다. 메모리의 같은 위치에 접근한다. 접근 시간이 겹친다. (순간적 / 장기적) 접근이 시작되고, 종료되기 전에 다른 ..
[Swift] 오버플로우, 오버플로우연산자
오버플로우의 개념 overflow의 사전적 의미는 넘쳐 흐르다. 범람하다 등의 뜻이다. Swift언어의 오버플로우는 대략 다음과 같다. 각 정수형은 담을 수 있는 수의 크기가 있다. 자료형 범위 부호여부 크기 Int8 -128 ~ 127 부호 있음 8 비트 Int16 -32768 ~ 32767 부호 있음 16 비트 Int32 -2147483648 ~ 2147483647 부호 있음 32 비트 Int64 -9223372036854775808 ~ 9223372036854775807 부호 있음 64 비트 UInt8 0 ~ 255 부호 없음 8 비트 UInt16 0 ~ 65535 부호 없음 16 비트 UInt32 0 ~ 4264967295 부호 없음 32 비트 UInt64 0 ~ 184467440737095516..
[Swift] String의 Subsequence(Substring)란
SubString(Subsequence) String인스턴스의 일부의 새 메모리에 복사하지 않고 원본 문자열 문자의 일부분을 참조한다. 메모리 사용량을 줄이고 성능을 향상시키는데 도움된다. 원본의 수정이 일어나기 전까지 메모리 공유, 원본이 수정되면 SubString은 새로운 메모리 공간을 갖게된다. 오랜기간 저장하기 위해서는, 새롭게 문자열로 저장할 필요 String인스턴스에서 prefix, suffix등을 사용하여 SubString을 만들 수 있다. var greeting = "Hello, world!" let index: String.Index = greeting.firstIndex(of: ",") ?? greeting.endIndex // ,(콤마)의 인덱스 let beginning: String..
[Swift] 날짜와 시간데이터를 사용하기
UTC(Coordinated Universal Time): 국제 표준시간 / 국제 사회가 사용하는 과학적 시간의 표준 GMT와 같다 영국의 그리니치 천문대의 시간을 기준으로 하는 시간 한국의 시간(KST)은 UTC + 9와 같다. 날짜와 시간 데이터를 가지고 놀기 위해선 아래와 같은 요소를 알아야한다. Date,TimeInterval, Calendar, DateComponents Date구조체는 초를 기준으로하는 절대적 시점을 의미한다 이를 잘 활용하기 위해선 Calendar이나 DateFormatter를 잘 활용해야한다. 💥1. Date구조체 ReferenceDate: 기준시간 2001.01.01: 00:00:00 UTC를 기준으로 한다. var now = Date() //현재 var yesterday..
[Swift] 접근 제어(Access Control)
❓접근 제어가 왜 필요할까? 코드의 세부 구현 내용을 숨기는 것이 가능해짐(객체지향 - 은닉화⭐️) 속성, 메서드를 숨길 수 있음. 코드의 영역을 분리시켜서, 효율적 관리 가능 컴파일 시간이 줄어듬(컴파일러가 변수의 사용범위를 인지가능)⭐️ 애플이 자신들이 원하는 코드를 감출 수 있음 ❓접근 제어를 가질 수 있는 요소 스위프트 공식문서 ==> 엔티티/ 독립된 개체 타입(클래스/구조체/열거형/스위프트 기본타입 등) 변수/속성 함수/메서드(서브스크립트, 생성자 포함) 프로토콜도 특정 영역으로 제한될 수 있음 ❓접근 수준(Access Levels) 1) open - 다른 모듈에서도 접근가능 / 상속 및 재정의도 가능 (제한 낮음) 2) public - 다른 모듈에서도 접근가능(상속/재정의불가) 3) inter..