swift optional
iOS/swift
2016. 10. 20. 01:48
optional ?
swift언어에서는 변수형을 지정하지 않아도 초기화 할 때 컴파일러가 지정해 줍니다.
하지만, null처럼 아무 값이 없는 표현은 swift에서는 포인터가 아니므로 nil로 지정됩니다.
Pascal의 영향을 받은 것 같네요.
Apple에서 직접 참고 해보았습니다.
Apple Developer Site -> Swift_Programming_Language
var x: Int? // nil이 들어간 변수가 됩니다.
이렇게 nil이 들어 갈 수 있도록 예외처리 겸 변수를 선언 할 수 있도록 만든 변수를 optional이라 합니다.하지만, 문제가 됩니다. 여기에 값이 할 당 되면 java에서 wrapper class에 wrapping되는 것 처럼
Optional(값)
으로 감싸이게 되요.첫 번째 방법은 위의 optional변수 x를 일반변수 z에 넣으려고 합니다. 변수의 값을 활용하려면 Unwrapping을 해주어야되요. java에서는 implicitly unwrapping으로 자동형변환이 되지만 여기서는 !로 포장을 풀어서 상수처럼 만들어줍니다. 이 처럼 강제로 Unwrapping을 해주는 것을 Forced Unwrapping이라고 합니다.
var z: Int
z = x! // !가 Optional을 풀어 값을 z로 넣어줍니다.
두 번째 방법은 임시로 상수, 변수를 만들어 넣으면 Auto Unwrapping됩니다.
if let z = x {
}
이렇게 하면 예외처리를 직접 if문으로 해주어야 하는데 안해주면 컴파일러가 삐져요.
그러면 if문을 써서 같이 Unwraping을 해줄 수 있는데 이것을 Optional Binding이라고 합니다.
if let z = x {
println("x \(x)")
} else {
println("binding error")
}
nil처리가 정말 필요 없을 때가 있을 수도 있습니다. 이러할 때는 암묵적으로 Unwrapping해주는 변수를 만들 수 있어요. 이 경우에는 자료형을 !으로 선언해주면 Optional() Type을 Unwrapping해서 받을 수 있습니다. 이러한 방법을 Implicitly Unwrapping이라 합니다.
var y: Int!
y = x