코드 출처 - iOS 프로그래밍을 위한 스위프트 기초
- 인스턴스 생성과 소멸 (Instance init / deinit)
- Initializer / Deinitializer
- 인스턴스 초기화 후에는 프로퍼티에 기본값을 할당해야 한다.
- 프로퍼티에 미리 값을 할당해두면 초기화와 동시에 기본값을 가질 수 있다.
- init 키워드를 사용한다.
- 인스턴스 초기화 후에는 프로퍼티에 기본값을 할당해야 한다.
- 초기값이 굳이 필요하지 않은 경우에는 Optional을 붙여준다.
- 만들어져 있던 이니셜라이저를 사용하려면 → self
-
class PersonC { var name: String var age: Int var nickName: String? // 초기값이 굳이 필요하지 않다면 옵셔널 사용 init(name: String, age: Int, nickName: String) { self.name = name self.age = age self.nickName = nickName }
-
- 자신의 이니셜라이저를 사용(호출)하려면 → convenience init
-
convenience init(name: Stirng, age: Int, nickName: String) { init(name: name, age: age) self.nickName = nickName }
-
- 암시적 추출 옵셔널
- 인스턴스 사용에 꼭 필요하지만 초기값을 할당하지 않고자 할 때 사용
- 전달되기 어려운 값인 경우 이름만 받아두고 나중에 사용하는 것과 같다.
-
class Puppy { var name: String var owner: PersonC! init(name: String) { self.name = name } func goOut() { print("\(name)가 주인 \(owner.name)와 산책을 합니다") } }
- 인스턴스 사용에 꼭 필요하지만 초기값을 할당하지 않고자 할 때 사용
- 실패 가능한 이니셜라이저
- 전달될 값들이 정상범주를 넘어가거나, 원하는 값의 범위가 아닐 때
- 실패하면 nil을 반환한다.
- 반환 타입이 Optional이다.
-
class PersonD { var name: String var age: Int var nickName: String? init?(name: String, age: Int) { if(0...120).contains(age) == false { return nil } if name.count == 0 { return nil } self.name = name self.age = age } }
- Deinitializer
- 클래스의 인스턴스가 메모리에서 해제되는 시점에 자동으로 호출된다.
- 인스턴스가 해야할 일을 구현할 수 있다.
- class 타입에만 구현 가능하다.
- Initializer / Deinitializer
- 옵셔널 체이닝과 nil 병합
- Optional chaining & nil-coalescing Operator
- 구조체, 클래스 등을 선언해 줄 때 타입 내에 또 다른 인스턴스가 들어오거나, 인스턴스끼리 연결되어 프로퍼티를 계속 타고 들어가야 하는 경우
- ex) 프로퍼티 자체가 옵셔널 → nil인지 확인해봐야 함
- 옵셔널 체이닝을 사용해 원하는 값을 한 번에 찾을 수 있다.
- 옵셔널 체이닝 = nil 체크를 편하게 하는 방법
- ex) 프로퍼티 자체가 옵셔널 → nil인지 확인해봐야 함
- 중간에 하나라도 비어있다 (= nil값이다) → 그 전 단계에서 멈춤 → nil 반환
- 기본값을 쓰고 싶다면 → Optional ?? Value 사용
- 앞의 값이 nil이라면 뒤의 Value를 반환
- 코드
- 타입 캐스팅 type casting
- type casting = 형 변환
- 역할
- 인스턴스의 타입 확인
- 클래스의 인스턴스를 자신의 조상이나 후손 클래스의 타입으로 사용할 수 있는지 확인
- as, is 키워드 사용
- as
- 다운 캐스팅
- 부모 클래스의 자식 클래스의 인스턴스를 사용할 수 있도록 타입 정보를 컴파일러에 알려주는 것
- as?
- 조건부 다운 캐스팅
- 실패의 가능성 내포 → nil이 반환될 수 있음 → 결과값을 옵셔널 타입으로 지정
- as!
- 강제 다운 캐스팅
- 위험요소가 있음
- 반환 타입이 일반 타입임 → 활용 가능성이 많음
- ex) 함수로 전달 → switch로 확인
- 강제 다운 캐스팅
- as?
- is
- 업 캐스팅
- 타입을 확인함.
- 결과 → true, false로 나뉨
- as
- 코드
'개발 > iOS' 카테고리의 다른 글
[iOS/Swift] 오늘 배운 것 정리 #1 (0) | 2021.11.19 |
---|---|
swift 문법 기초 7/7 (0) | 2021.09.01 |
틀린문제 (스위프트 클로저 퀴즈) (0) | 2021.08.29 |
swift 문법 기초 5/7 (0) | 2021.08.28 |
[Swift] 함수형 타입 Functional Type (0) | 2021.08.28 |
댓글