(값이 있을수도 있고 없을수도 있습니다…)
옵셔널이 왜 필요한가??
nil의 가능성을 명시적으로 표현 - 문서/주석을 작성하지 않더라도 nil이 있을 수 있다는 것을 알 수 있음
옵셔널이 아니라면 nil체크를 하지 않고 안심하고 사용할 수 있음
옵셔널 타입이 명시가 되어있지 않은 경우 parameter에 nil을 넣으면 컴파일단계에서 에러
enum Optional<Wrapped>: ExpressibleByNiliteral {
case none
case some(Wrapped)
}
let optionalValue: Optional<Int> = nil
let optionalValue: Int? = nil
Int?/Int!
Int형의 값 or nil
Swift에서는 기본 자료형 Int, Double, String등은 nil을 저장할 수 없음.
nil도 저장하려면 옵셔널 타입으로 저장해야함
var index: Int?
index 변수는 정수 값을 갖거나 아무 값도 갖지 않을 수 있음
var x: Int? // 옵셔널 정수형 변수 x 선언
var y: Int = 0
x = 10
print(x) // Optional(10)
print(x!) // forced unwrapping 되어서 10
print(y)
x = x + 2 // Optional과 Int이므로 안된다.
y = x // Optional과 Int이므로 안된다.
// x!으로 풀어주고는 할 수 있음
var x: Int?
print(x) // nil
print(x!) // 강제 언래핑할 값이 없으므로 에러가 난다.
var y : Int? = 10
print(y) // Optional(10)
var z : Int! = 10
print(z) // Optional(10)
var y : Int?
print(y) // nil
var z : Int!
print(z) // nil
강제 언래핑하는 다른 방법으로, 옵셔널 바인딩을 이용하여 옵셔널에 할당된 값을 임시변수 또는 상수에 할당
if let constantName = optionalName {
// 옵셔널 값이 있다면(nil이 아니라면) 언래핑해서 일반상수 constantName에 대입하고 if문을 실행함
// 값이 없다면 if문의 조건이 거짓이 되어 실행되지 않음
}
var x: Int?
x = 10
if let xx = x {
print(xx) // x에 Optional(10)이라는 값이 있으므로 10이 출력됨
} else {
print(nil)
}
var pet1: String?
var pet2: String?
pet1 = “cat”
pet2 = “dog”
if let first = pet1, let secondPet = pet2 {
print(firstPet, secondPet)
} else {
print(“nil”)
}
let ~, let ~ 혹은 var ~, var ~ 각각 다 작성
,는 and와 같음. 하나라도 틀릴 경우 else문으로 넘어감