728x90
Initializers (초기화) 사용법 & 예제
Failable initializer
초기화 실패를 옵셔널로 처리하는 방법을 알아보겠습니다.
- 유형 1
Failable initializer는 초기화에 성공한다면 초기화된 인스턴스가 옵셔널 형태로 return 되고 실패한다면 nil을 return하게 됩니다.
init?(parameter) {
initialization
}
- 유형 2
초기화 성공되면 (Non-optional) 인스턴스를 return하고 실패한다면 crash가 발생
init!(parameter) {
initialization
}
사용 예제
struct Position {
let x: Double
let y: Double
init?(x: Double, y: Double) {
guard x >= 0.0, y >= 0.0 else { return nil }
self.x = x
self.y = y
}
init!(value: Double) {
guard value >= 0.0 else { return nil }
self.x = value
self.y = value
}
// init(value: Int) {
// self.x = value
// self.y = value
//
// }
}
var a = Position(x: 12, y: 34)
a = Position(x: -12, y: 0)
var b: Position = Position(value: 12)
//b = Position(value: -12) // 그냥 nil 리턴하게 바뀌었다. IUO 변경사항 , nil을 강제 추출하면 크래쉬
//초기화 실패 했을때 에러 막기 위해서인데 !는 어렵다.
b
Deinitializer(소멸자)
Deinitializer(소멸자) 는 클래스 전용이며 1개로 제한 됩니다.
인스턴스가 해제되기 전에 호출 됩니다.
deinit {
Deinitialization
}
사용 예제
class Size {
var width = 0.0
var height = 0.0
}
class Position1 {
var x = 0.0
var y = 0.0
}
class Rect {
var origin = Position1()
var size = Size()
deinit {
print("deinit \(self)")
}
}
var r: Rect? = Rect()
r = nil
출처 : 어서와! Swift는 처음이지?(Programmers)
728x90
'Language > Swift' 카테고리의 다른 글
[Swift] Method and Subscript 사용법 & 예제 [1/2] (0) | 2020.09.11 |
---|---|
[Swift] Mutating Keyword 사용법 & 예제 (0) | 2020.09.09 |
[Swift] Initializers (초기화) 사용법 & 예제 [1/2] (0) | 2020.09.08 |
[Swift] 제네릭 (Generics Function)이란? (0) | 2020.09.04 |
[Swift] 익스텐션(Extension)이란? (0) | 2020.09.02 |