티스토리 뷰
Swift를 처음 배우는 사람들에게는 조금 생소한 개념인 Optional에 대해서 알아보겠습니다
Optional ?
- 타입에 값이 있을 수도, 없을 수도 있음을 표현한 것입니다.
- 값이 없음은 nil로 표현할 수 있습니다.
- 즉, nil이 할당될 수 있는지 없는지를 표현하는 것입니다.
- Optional 타입이 아닌 경우에는 nil 값을 갖게 되면 오류가 발생합니다.
- 예를 들면, 사람들에게는 소유하고 있는 집이 있을 수 있고, 없을 수도 있습니다.
이런 특징을 가진 변수/상수에 Optional 타입을 할당합니다.
var houseName : String? => 다음과 같이 타입 뒤에 ? 를 붙임으로써 Optional 형식으로 타입을 선언합니다.
- Optional 타입일 때 nil이 아닌 값을 print 하면 Optional(값)의 형태로 출력됩니다.
var houseName: String = nil (x)
var houseName: String? = nil (o)
houseName = "apart"
print(houseName)
//Optional("apart")
왜 사용할까?
- 예외상황을 최소화하는 안전한 코딩을 위해서 사용합니다
문제점
- Optional 타입의 값을 사용할 때 그대로 사용할 수 없습니다.
- 위의 예와 같이 Optional("apart") 형태로 저장이 되어있어서 이 값을 추출해서 사용해야 합니다.
- 값을 추출하기 위해서 3가지 방법이 있습니다.
1. Forced unwrapping (!)
- Optional에 값이 들어있는지 아닌지 확인하지 않고 강제로 값을 꺼내는 방식입니다.
- 값이 있다면 바로 출력되지만, 값이 없다면(nil) 에러가 발생합니다.
- !를 붙여서 사용합니다.
- 에러를 발생시키기 때문에 많이 추천되는 방법은 아닙니다.
var houseName: String? = "apart"
print(houseName!) //apart
houseName = nil
print(houseName!) //Error
2. Optional Binding (If let ~)
- Optional 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내옵니다.
- 값이 있다면 if let 문의 내용이 실행되고, 값이 없다면 else 문의 내용이 실행됩니다.
- if let 값을 받을 상수 이름 = Optional 값 { ... } else { ... }
- else 문이 없고, 값이 nil이라면 아무것도 실행되지 않고 뒤의 코드로 진행됩니다.
var houseName: String? = "apart"
if let house = houseName {
print(house) //apart 출력
} else {
print("nohome") //houseName이 nil일 때 출력
}
3. Optional Binding (guard let ~)
- If let 과 같이, Optional 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내옵니다.
- 값이 있다면 뒤의 코드로 이어지고 값이 없다면 else에서 처리됩니다.
- else 문에선 return, break 같은 코드 블록을 종료시키는 명령어가 필요합니다.
- guard let 값을 받을 상수 이름 = Optional 값 else { ... return} ...
- 보통 함수 안에서 사용합니다.
func ob() {
let houseName: String? = "apart"
guard let house = houseName else {
print("nohouse") // houseName이 nil일 때 출력
return
}
print(house) // apart 출력
}
ob()
Reference :
'Swift' 카테고리의 다른 글
[iOS] Swift 열거형 (enum) (0) | 2021.02.22 |
---|---|
[iOS] Swift Collection Types (Array, Dictionary, Set) (0) | 2021.02.17 |
[iOS] Swift Fuction 정리 (0) | 2021.02.11 |
[iOS] Swift 반복문 (While 문, For 문) (0) | 2021.02.07 |
[iOS] Swift 조건문(If~ else문, Switch문) (0) | 2021.02.06 |
- Total
- Today
- Yesterday
- URLComponents
- PHAsset
- ios
- setBackgroundColor
- WKUIDelegate
- 개발동아리
- cs
- swiftsoup
- isNetworkAccessAllowed
- 부캠
- returnKey
- 프로세스간통신
- 디프만
- RxSwift
- 슈퍼스칼라
- sharedmemory
- Xcode
- Swift
- rxcocoa
- 스냅킷
- optional
- 운영체제
- OS
- 쓰레드
- webcrawl
- 스레드
- 멀티프로세스
- 프로세스
- PHImageRequestOptions
- 개발대외활동
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |