현제의 현재이야기
[swift] 기초 문법 4일차 본문
옵셔널
스위프트의 대표적인 특징이라는 옵셔널을 배웠다.
옵셔널 값을 추출하는데는 if let을 사용한 옵셔널 바인딩과 !를 이용한 옵셔널 벗기기가 있다.
import UIKit
var address: Int? = nil
if let yourAddress: Int = address{
print("당신의 주소는 \(yourAddress) 입니다.")
} else{
print("아직 주소가 배정되지 않았습니다.")
}
//아직 주소가 배정되지 않았습니다.
이렇게 값이 없는 nil을 사용할 수 있다.
암시적 옵셔널과 그냥 옵셔널과의 차이점
import UIKit
var address: Int! = 500
address = address + 2
if let yourAddress: Int = address{
print("당신의 주소는 \(yourAddress) 입니다.")
} else{
print("아직 주소가 배정되지 않았습니다.")
}
//당신의 주소는 502 입니다.
--------------------------------
import UIKit
var address: Int? = 500
address = address + 2
if let yourAddress: Int = address{
print("당신의 주소는 \(yourAddress) 입니다.")
} else{
print("아직 주소가 배정되지 않았습니다.")
}
//MyPlayground.playground:5:11: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
address = address + 2
^
암시적 옵셔널은 기존 변수처럼 사용할 수 있지만, 옵셔널은 기존 변수처럼 사용이 불가능하다.
그러나 ? 옵셔널도 변수에 값을 넣을 수 있다.
var optionalTwo: Int? = nil
optionalTwo = 23
if let check = optionalTwo{
print(check)
}
optionalTwo = 25
if let check = optionalTwo{
print(check)
}
//23
//25
이렇게 옵셔널은 두개의 값도 넣을 수 있다.
import UIKit
var address: Int? = 500
var name : String? = "이현제"
if let yourAddress = address,
let yourName = name{
print("당신의 주소는 \(yourAddress)이고, 이름은 \(yourName)입니다.")
} else{
print("아직 주소가 배정되지 않았습니다.")
}
//당신의 주소는 500이고, 이름은 이현제 입니다.
만약 하나가 충족되지 않으면
import UIKit
var address: Int? = 500
var name : String? = nil
if let yourAddress = address,
let yourName = name{
print("당신의 주소는 \(yourAddress)이고, 이름은 \(yourName)입니다.")
} else{
print("주소나 이름이 배정되지 않았습니다.")
}
//주소나 이름이 배정되지 않았습니다.
이렇게 뜬다.
import UIKit
var address: Int? = 500
var name : String? = "이현제"
if let yourAddress = address, yourAddress > 400,
let yourName = name{
print("당신의 주소는 \(yourAddress)이고, 이름은 \(yourName)입니다. 주소는 400이 넘습니다.")
} else{
print("주소나 이름이 배정되지 않았습니다.")
}
//당신의 주소는 500이고, 이름은 이현제입니다. 주소는 400이 넘습니다.
또한 이렇게 조건도 지정할 수 있다. 알고리즘 짤 때 배열 안의 값이 없냐 있냐 이런거 짤 때 유용할 것 같다.
옵셔널 벗기기
옵셔널에 값이 있다고 가정하고 !를 붙여서 강제로 옵셔널을 벗겨준다.
var name : String? = "이현제"
print(name)
//Optional("이현제")
---------
var name : String? = "이현제"
print(name!)
//이현제
var name : String?
print(name!)
//Fatal error: Unexpectedly found nil while unwrapping an Optional value
그런데 변수에 저장된 값이 nil일 경우에는 런타임 에러가 발생한다.
!를 붙이면 강제 벗기기이다. 근데 이 역시 값이 없으면 오류가 뜬다.
파이썬에 없던 개념이라 조금 어려웠다. 아자아자 홧팅
'IOS > swift' 카테고리의 다른 글
[swift] 기초 문법 6일차(클로저) (0) | 2022.09.13 |
---|---|
[swift] 기초 문법 5일차 (0) | 2022.09.12 |
[swift] 기초 문법 3일차 (0) | 2022.09.10 |
[swift] 기초 문법 2일차 (0) | 2022.09.08 |
[swift] 기초 문법 1일차 (0) | 2022.09.07 |
Comments