[Swift] Initializers (초기화) 사용법 & 예제 [2/2]

728x90

Initializers (초기화) 사용법 & 예제


Failable initializer

초기화 실패를 옵셔널로 처리하는 방법을 알아보겠습니다.

  • 유형 1
    Failable initializer는 초기화에 성공한다면 초기화된 인스턴스가 옵셔널 형태로 return 되고 실패한다면 nilreturn하게 됩니다.
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

실행하면 deinit 의 로그를 확인 할 수 있습니다.


출처 : 어서와! Swift는 처음이지?(Programmers)
728x90

댓글

Designed by JB FACTORY