! 뜻 : 강제 추출 연산자 (Forecd Unwrapping Operator)
Optional Type
Non-optional Type
Wrapping
Unwrapping
옵셔널 바인딩은 옵셔널의 값이 존재하는지를 검사, 존재하면 그 값을 다른 변수에 대입시켜줍니다.
if let 또는 if var 를 사용합니다.
옵셔널의 값을 벗겨서 값이 있다면 if문 안으로 들어가고
값이 nil이라면 그냥 통과하게 됩니다.
optionalEmail에 값이 있으면
email이라는 변수 안에 값이 저장되고,
if문 내에서 그 값을 사용할 수 있습니다.
만약 optionalEmail이 nil이면,
if문이 실행되지 않고 지나쳐 집니다.
if var email = optionalEmail {
print(email)
}
하나의 if문에서 콤마(,)로 구분하여 여러 옵셔널을 바인딩할 수 있습니다.
이곳에 사용된 모든 옵셔널의 값이 존재해야 if문 안으로 진입합니다.
var optionalName: String? = "Donkey"
var optionalEmail: String? = "Donkey.gmail.com"
if let name = optionalName, email = optionalEmail {
}
옵셔널 바인딩할 때 콤마(,)를 사용하여 조건도 함께 지정할 수 있습니다.
콤마(,)이후의 조건절은 옵셔널 바인딩이 일어난 후 실행됩니다.
즉, 옵셔널이 벗겨진 값을 가지고 조건을 검사하게 됩니다.
var optionalAge: Int? = 22
if let age = optionalAge, age >= 20 {
}
윗코드와 동일 합니다.
var optionalAge: Int? = 22
if let age = optionalAge {
if age >= 20 {
}
}
옵셔널 IUO란
강제 추출, 옵셔널 바인딩처럼 별도의 추출 과정을 거치지 않고도
옵셔널이 해제되는 방법 입니다.
변수와 상수를 선언할 때 타입뒤에 ! 를 붙입니다.
옵셔널 Unwrapping과 마찬가지로, 값이 없는데 접근을 시도하면 런타임 에러가 발생합니다.
참고자료
https://devxoul.gitbooks.io/ios-with-swift-in-40-hours/content/Chapter-2/optionals.html