728x90
|
이니셜라이저 (Initializer)
- initializer는 특정 type의 새로운 instance를 생성하기 위한 호출되는 메서드이다.
default initializer
- Swift는 아무 initializer도 구현하지 않은 class나 structure를 위해 default initializer를 제공한다.
- default initializer는 모든 property를 각각의 default value로 초기화한 상태로 instance를 생성한다.
struct, enumeration의 초기화
- struct의 경우 memberwise initializer라고 해서, 아무 initializer를 생성하지 않은 경우, 모든 member property를 초기화할 수 있는 initializer가 제공된다.
- enum의 경우 initializer에서 반드시 하나의 case로 self를 초기화 시켜야 한다.
import UIKit
struct B {
var x: Int, y: Int
}
let b = B(x: 0, y: 3) // struct의 memberwise initializer
enum C {
case firstCase
init() {
self = .firstCase //열거형은 반드시 하나의 case가 되어야함.
}
}
초기화 위임 (Delegation of initialization)
- initializer 내부에 다른 initializer에게 일부 초기화를 위임하게 해서 호출하는 방법
import UIKit
class A {
var name: String
var age: Int
init(name: String) {
self.name = name
self.age = 1
}
convenience init(name: String, age: Int) {
self.init(name: name)
self.age = age
}
}
designated initializer vs convenience intializer
- designated initializer
- class의 주요, 메인 initializer라고 할 수 있으며 class에 있는 모든 property들을 초기화한다.
- 그리고 superclass chain에서 적절한 superclass initializer를 호출하여 초기화 작업을 계속 한다.
- 클래스에서 최소 한개는 가진다.
- conveience initializer
- class의 보조 initializer라고 할 수 있다.
- class내의 designated initializer를 호출하여 designated intializer의 파라미터들을 default value로 초기화하고 필요하다면 내부의 추가로 초기화 로직을 구현한다.
실패 가능한 이니셜라이저 (Failable Initializer)
- 잘못된 전달인자나 적철하지 못한 값이 전달된 경우엔 인스턴스를 초기화 할 수 없는 경우가 발생
- 그런 경우엔 실패 가능한 이니셜라이저를 통해 nil을 반환할 수 있다.
import UIKit
class A {
var name: String
var age: Int
init?(name: String) {
if name == "Fail Name" {
return nil
}
self.name = name
self.age = 1
}
}
728x90
'Swift' 카테고리의 다른 글
[Swift] inout 파라미터 (0) | 2021.05.28 |
---|---|
[Swift] 제네릭 (Generics) (0) | 2021.05.28 |
[Swift] 옵셔널 추출 (Optional Unwrapping) (0) | 2021.05.05 |
[Swift] Selector (0) | 2021.04.22 |
[Swift] Equatable (0) | 2021.04.21 |
댓글