래핑과 언래핑
옵셔널을 위한 연산자로는 '?' 와 '!' 가 있다.
'?' 는 옵셔널로 래핑을 하고, '!' 는 강제로 언래핑을 하는 역할이다.
변수의 값을 사용하려면 언래핑을 해야 한다.
var x : Int = 10
print(x) //10
var y : Int? = 20
print(y) //Optional(20)
print(y!) //20
var y : Int? = 20
y = y! + 1
print(y) //optional(21)
위와 같은 경우, y! + 1 에서 잠깐 언래핑하여 쓰고 다시 래핑되어 optional(21)이 출력된다.
nil?
0이 아닌, 값이 없다는 것을 표현한다. (null과 다름)
var x : Int = 10
print(x) //10
var y : Int?
print(y) //nil
var x : Int = 10
print(x) //10
var y : Int?
print(y!) //error
if문을 이용하여 x에 값이 있을 때는 값을 출력하고, 없으면 nil을 출력하는 코드이다.
var x : Int?
x = 10
if x != nil{
print(x!)
}
else {
print("nil")
}
//결과값 10
var x : Int?
//x = 10
if x != nil{
print(x!)
}
else {
print("nil")
}
//결과값 nil
만약 위 코드에서 x!=nil 형식으로 입력하는 경우 x! = nil의 의미가 되어 버린다.
'!' 이 우선 순위가 가장 높기 때문이다.
옵셔널 바인딩의 예
var x : Int?
x = 10
if let xx = x {
print(x,xx) //optional(10) 10
}
var x : Int?
x = 10
if let x {
print(x) //10
}
var x : Int?
x = 10
if let xx = x {
print(x, xx)
}
else{
print("nil")
}
var x1 : Int?
if let xx = x1{
print(xx)
}
else{
print("nil")
}
//출력값
//optional(10) 10
//nil
Swift 5.7부터는 if let x라고 입력해도 정상적으로 실행된다.
var x : Int?
var y : Int?
x = 10
y = 20
if let xx = x, let yy = y {
print(xx, yy)
} else {
print("nil")
}
//10 20
이런 식으로 한 번에 옵셔널 바인딩이 가능하다.
var x : Int? = 10
var y : Int? = 20
if let x, let y {
print(x, y)
}
조금 더 간략하게 만든 코드이다.
두 가지의 옵셔널 타입
앞서 말한 옵셔널 선언 방법 외에 하나의 방법이 또 있는데, 이에 대해서 설명해 보겠다.
var x : Int? = 10
var y : Int! = 20
print(x,y) // Optional(10) Optional(20)
위와 같이 '!' 를 이용하여 선언할 수 있다.
var x : Int? = 10
var y : Int! = 20
var z : Int = 1
z = x!
print(z) //10
z = y
print(z) //20
두 방법의 차이점을 알아 보자.
'?' 의 경우에는 꼭 언래핑을 해 주어야 한다.
반면, 옵셔널을 '!' 로 선언하는 경우엔 굳이 언래핑을 하지 않아도 결과값이 20으로 출력된다.
Optional로 사용할 수 없는 경우에는 자동으로 언래핑 해 주기 때문이다.(사용 가능하면 그냥 Optional로 인식)
nil 병합 연산자 - '??' 예제
var x : Int? = 10
var y : Int
y = x ?? 1 //x의 값이 nil일 경우 1을 대입한다.
print(x,y) //Optional(10) 10
var x : Int? = 10
var y : Int
y = x ?? 1
print(x,y) //nil 1
모든 출처: Smile han의 iOS 프로그래밍
'iOS' 카테고리의 다른 글
Swift - 5 Method(함수) 2 (0) | 2024.10.15 |
---|---|
Swift - 4 Method(함수) (1) | 2024.10.08 |
Swift - 2 연산자, 제어문 (2) | 2024.09.25 |
Swift - 1 (0) | 2024.09.11 |
Mac 사용법(단축키) (0) | 2024.09.11 |