반응형
    
    
    
  안녕하세요 공부하는 개발자입니다.
오늘은 스위프트 생성자 마지막 포스팅 입니다.
⚙️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 | 
