iOS
[iOS/Swift] 3. 옵셔널, 옵셔널 바인딩
AHHYE
2021. 2. 8. 09:19
옵셔널
: 어떤 값을 가질 수도 있고 값을 가지지 않을 수도(nil) 있는 변수
* 물음표( ? )를 사용하여 표시
var name: String = "Ahhye"
name = nil //컴파일 에러
var phone: String?
var email: String? = nil
print(phone) //nil
print(email) //nil
phone = "01012345678"
print(phone) //Optional(01012345678)
* 옵셔널이 아닌 변수에 옵셔널 변수 대입 불가능
옵셔널 바인딩(Optional Binding)
: 옵셔널 값이 존재하는지 확인 후 존재한다면 다른 변수에 그 값을 대입시키는 것
* if let/var 사용
* 여러 옵셔널을 바인딩할 때는 쉼표( , )로 구분하며 모든 옵셔널의 값이 존재해야 if문 실행
var optionalPhone: String? //nil
if let phone = optionalPhone {
print(phone) //optionalPhone의 값이 nil이므로 실행하지 않음
}
var optionalEmail: String? = "abc123@aaaa.com"
if let email = optionalEmail {
print(email) //Optional(abc123@aaaa.com)
}
var optionalGender: String? = "Female"
var optionalName: String? = "Ahhye"
if let gender = optionalGender,
name = optionalName {
//모든 옵셔널의 값이 존재하므로 if문 실행
}
* 바인딩된 값의 조건을 정의할 때는 쉼표( , ) 사용
var optionalBrithyear: Int? = 1998
if let birthyear = optionalBirthyear, birthyear < 2002 {
//옵셔널 값이 존재하고 조건에 해당되므로 if문 실행
}
if let birthyear = optionalBirthyear {
if age < 2002 {
//이렇게도 쓸 수 있음
}
}
Unwrapping
Forced Upwrapping
* 느낌표( ! ) 사용
* 옵셔널 값이 nil인 경우 런타임 에러 발생
print(optionalBirthyear) //Optional("1998")
print(optionalBirthyear!) //1998
Implicitly Upwrapped Optional
* 옵셔널 정의 시 물음표( ? ) 대신 느낌표( ! )를 붙이는 경우
* 바인딩이나 upwrapping 없이 값에 바로 접근 가능
var name: String! = "ahhye"
print(name) //ahhye
var name: String! //nil
print(name) //런타임 에러
옵셔널 체이닝(Optional Chaining)
* 인스턴스 내부의 옵셔널일 수 있는 값이 nil인지 확인할 수 있는 방법
* 옵셔널 바인딩 과정을 물음표( ? )로 줄여줌