옵셔널 정의
A type that represents either a wrapped value or nil, the absence of a value.
래핑 된 값 또는 값이 없는 nil을 나타내는 타입입니다.
왜 옵셔널 타입을 사용해야 하나
옵셔널로 선언된 변수는 초기화가 수행되지 않으면 nil로 자동 초기화 되기 때문에 런타임 에러를 방지할 수 있기 때문이다.
옵셔널 구조
enum Optional<Wrapped> {
case none // nil
case some(Wrapped) // optional value
}
var name: String? // var name: Optional = .none
var name: String? = "Terry" // var name: Optional = some("Terry")
var name: String? = nil // var name: Optional = .none
값이 주어지는 옵셔널의 생성자
값이 없는 옵셔널의 생성자
이렇게 2종류의 생성자를 지원하기 때문에 옵셔널을 편리하게 사용할 수 있다.
옵셔널 사용
즉 옵셔널도 결국 enum type이기 때문을 값을 뽑아올 때 다음과 같은 switch구문등을 사용해야 할 것이다
switch name{
case .none:
print("nothing")
case .some:
print(name!)
} // Terry
if let value = name {
print(value)
} else {
print("nothing")
} // Terry
if case .some(let value) = name {
print(value)
} // Terry
하지만 항상 이와 같은 방법으로 옵셔널 타입을 사용하는 건 불편하기 때문에 !, ?와 같은 약속을 만들어 사용한다. (내부적으론 enum type으로 작성된 optional코드가 실행됨)
옵셔널 타입 추출 방법
1. 강제 추출
nil이 아닌 값이 있다고 개발자가 확신하여 강제 추출하는 방법으로 다음과 같이 사용한다
num!
2. nil이 아닌지 확인 후, 강제추출
if문을 통해 nil이 아님을 먼저 확인 후, 강제 추출하여 에러의 가능성을 없앤다
if num != nil {
print(num!)
}
3. 옵셔널 바인딩
바인딩되는 경우만 특정 작업을 수행하게 한다
if let name = optonalName {
print(name)
}
4. Nil-Coalescing
옵셔널 표현식 뒤에 기본값을 제시하여, 옵셔널의 가능성을 없앤다
optionalName ?? "홍길동"
참고
https://daheenallwhite.github.io/swift/2019/07/08/Optional-is-Enumeration-Type/
'iOS > Swift' 카테고리의 다른 글
[Swift] 매우 간단하게 함수의 성능을 개선하기(메모리 관리) (0) | 2023.01.30 |
---|---|
[Swift] 일급객체란? (0) | 2022.04.11 |
[Swift] 열거형 케이스 패턴에서 let 위치 차이점 (0) | 2022.03.25 |
[Swift] 프로퍼티(저장, 연산, 타입, 감시자) (0) | 2022.03.18 |
[Swift] 프로퍼티 접근자와 감시자는 동시에 재정의 할 수 없다 (0) | 2022.03.17 |