값이 있을 수도, 없을 수도 있음을 표현. nil이 할당 도리 수 있는지 없는지 표현
enum + generics
enum Optional<Wrapped> : ExpressibleByNiliteral {
case none
case some(Wrapped)
}
let optionalValue: Optional<Int> = nil
let optionalValue: Int? = nil
var implicitlyUnwrappedOptionalValue: Int! = 100
switch implicitlyUnwrappedOptionalValue {
case .none:
print(“This Optional variable is nil”)
case .some(let value):
print(“Value is \(value)”)
}
// 기존 변수처럼 사용 가능
implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1
// nil 할당 가능
implicitlyUnwrappedOptionalValue = nil
var optionalValue: Int? = 100
switch optionalValue {
case .none:
print(“This Optional variable is nil”)
case .some(let value):
print(“Value is \(value)”)
}
// 기존 변수처럼 사용불가 - 옵셔널과 일반 값은 다른 타입이므로 연산 불가
optionValue = optionValue + 1 // 에러
// nil 할당 가능
optionValue = nil
옵셔널 추출이란 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것을 말한다.
func printName(_ name: String) {
print(name)
}
var myName: String? = nil
printName(myName) // 전달되는 값의 타입이 다르기 때문에 컴파일 오류
if let name: String = myName {
printName(name)
} else {
print(“myName == nil”)
}
var yourName: String! = nil
If let name: String = yourName {
printName(name)
} else {
print(“yourName == nil”)
}
,를 사용해 한 번에 여러 옵셔널을 바인딩 할 수 있다. 단, 모든 옵셔널에 값이 있을 때만 동작한다.
myName = “ssionii”
yourName = nil
if let name = myName, let friend = yourName {
print(“\(name) and \(friend)”)
} // yourName이 nil이기 때문에 실행 X
yourName = “hana”
If let name = myName, let friend = yourName {
print(“\(name) and \(friend)”)
} // ssionii and hana
var myName: String? = “ssionii”
var yourName: String! = nil
printName(myName) // ssionii
myName = nil
print(myName) // 런타임 오류
yourName = nil
print(yourName) // 런타임 오류
해당 글은 boostcourse의 'iOS 프로그래밍을 위한 스위프트 기초' 강좌를 수강한 후 작성한 글 입니다.