반응형
안녕하세요 공부하는 개발자입니다.
오늘은 스위프트 생성자 마지막 포스팅 입니다.
⚙️Failable Initializer
Failable Initializer는 초기화에 실패를 하더라도 nil을 리턴 하며 error가 나오지 않는다.
init?의 경우에는 Optional형식으로 리턴하며 실패하면 nil을 반환한다.
init!의 경우에는 강제추출되어 nonOptional형식으로 추출됩니다.다만 리턴에 실패하면 crush가 발생한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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
self.init(x: value, y: value)
}
}
var a = Position(x: 12, y: 34)
a = Position(x: -12, y: 0)
var b = Position(value: 12)
b = Position(value: -12)
|
cs |
⚙️Deinitializer 소멸자
인스턴스가 메모리에서 사라지기 전에 부가적인 정리작업을 하는 용도로 사용한다.
class전용 이며 무조건 하나만 정의해야한다.
실행은 우리가 직접하는 것이 아니라 인스턴스가 메모리에서 사라질때 자동으로 실행한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class Size {
var width = 0.0
var height = 0.0
}
class Position {
var x = 0.0
var y = 0.0
}
class Rect {
var origin = Position()
var size = Size()
deinit{
print("deinit \(self)")
}
}
var r: Rect? = Rect()
r = nil
|
cs |
Deinitializer은 보통은 잘 사용할 일이 없지만 파일 연결이나 네트워크 연결처럼 자동으로 정리되지 않는 리소스제거나
디버그용도로 선언하여 사용한다.
반응형
'Ios > Swift' 카테고리의 다른 글
[Swift] Protocol_1 스위프트 프로토콜 (0) | 2022.08.04 |
---|---|
[Swift] Extension 스위프트 형식의 확장 (0) | 2022.08.02 |
[Swift] Initializers_2 스위프트 생성자 2 (0) | 2022.07.31 |
[Swift] Initializers 스위프트 생성자 (0) | 2022.07.25 |
[Swift] Overloading 스위프트 오버로딩 (0) | 2022.07.18 |