
Swift에서 옵셔널은 값이 있을 수도 있고, 없을 수도 있는 경우를 나타내는 특별한 타입입니다. 옵셔널은 Swift의 안정성을 높이는 데 중요한 역할을 합니다. 이 글에서는 옵셔널의 다양한 사용법을 소개합니다.
명시적인 nil 가능성: 옵셔널 타입은 값이 'nil'일 수 있다는 것을 명시적으로 표현합니다.
반면, 옵셔널이 아닌 타입에는 'nil'이 들어올 수 없기 때문에.
1.암시적 추출 옵셔널 (Implicitly Unwrapped Optionals, IUO): Int!와 같이 타입 뒤에 느낌표를 붙여 사용합니다.
2.일반 옵셔널: Int?와 같이 타입 뒤에 물음표를 붙여 사용합니다.
struct Cat {
let name: String = "Navi"
}
var maybeCat: Cat? = Cat()
print(maybeCat!.name) // Navi
maybeCat = nil
print(maybeCat!.name) // !!error!!
!를 사용하여 옵셔널의 값을 강제로 추출할 수 있지만, 값이 'nil'인 경우에는 런타임 에러가 발생합니다.
let optionalNumber = Optional(10)
print("추출 하기 전 : \(String(describing: optionalNumber))")
if let num = optionalNumber {
print("추출 성공 : \(num)")
} else {
print("바인딩에 실패")
}
func test() {
let optionalNumber: Int? = 3
guard let number = optionalNumber else {
return
}
print("optionalNumber : \(optionalNumber)")
print("number : \(number) ")
}
test()
if let과 guard let을 사용하여 안전하게 옵셔널 값을 추출할 수 있습니다.
func main() {
let optionFruit : String = "orange"
let unwrappedOptionFruit : String = "apple"
let optionTwoFruit : String? = optionFruit
let unwrappedTwoOptionFruit : String! = unwrappedOptionFruit
print(optionTwoFruit!)
print(unwrappedTwoOptionFruit)
}
IUO는 옵셔널을 사용할 때 매번 ! 연산자를 사용할 필요 없이 편리하게 사용할 수 있습니다.
var 옵셔널: String?
var 기본값 = "기본값"
print("현재 저장된 값은 어떤 값인가요? \(옵셔널 ?? 기본값)")
?? 연산자를 사용하여 옵셔널 값이 'nil'일 경우 대체값을 제공할 수 있습니다.
위 예제 코드들은 새싹 iOS 팀원 Effie, 노움, Dan의 예제 코드가 포함되어있습니다. 🌱
[Apple Developer - Optional]
https://developer.apple.com/documentation/swift/optional/
[옵셔널 체이닝 (Optional Chaining)]
https://bbiguduk.gitbook.io/swift/language-guide-1/optional-chaining
이해하기 쉬운 정리 잘 읽었습니다!!