-
[Swift] Optional(옵셔널)Swift 2022. 3. 17. 20:58728x90
옵셔널은 enum이다.
enum Optional<T> { case None // not set case Some<T> // set, T는 연관값 }
- Optional<T>에서 <T>는 옵셔널이 모든 타입의 옵셔널이 될 수 있다는 뜻
let x: String? = nil // = Optional<String>.None let x: String? = "hello" // = Optional<String>.Some("hello"), 연관값 hello
옵셔널을 unwrapped 하는 방법
1. switch를 사용해서 옵셔널을 unwrapped해 연관값을 가져오는 방법
switch x { case Some(let value): y = value case None: // error: raise an exception }
- 값이 없으면 런타임 오류가 발생함
2. if let을 사용한 방식
let x: String? = ... if let y = x { // do something with y } // == switch x { case .Some(let y): // do something with y case .None: break }
옵셔널 체이닝(Optional Chaining)
if let으로 unwrapped 하던 방식을 옵셔널 체이닝을 사용하여 아래와 같은 방식으로 unwrapped
var display: UILabel? if let label = display { if let text = label.text { let x = text.hashValue ... } } // or if let x: Int? = display?.text?.hashValue { ... } // 일단 언래핑을 시도해보고 언래핑을 할 수 있다면 그 값을 이용해서 다음걸로 이동하는 식 // 언래핑을 할 수 없다면 이 전체 표현에서 nil을 반환
?? 을 사용하여 unwrapped
- nil 일 때의 기본값을 제공
let s: String? = ... // might be nil if s != nil { display.text = s } else { display.text = " " } // can be expressed much more simply this way... display.text = s ?? " " // s가 nil이 아니라면 값이 언래핑되어서 사용될 것이고 그렇지 않다면 " " 빈공간
'Swift' 카테고리의 다른 글
[iOS|Swift] storyboard 없이 코드로 UI 구현하기 (0) 2022.05.08 [iOS|Swift] UIView 커스텀하기 (라운드) (0) 2022.04.22 [iOS|Swift] UIView 커스텀하기 (그림자) (0) 2022.04.22 [iOS|Swift] UICollectionView Cell 크기 지정하기 (1) 2022.04.16 [Swift] 'Entry point (_main) undefined' 에러 (0) 2021.05.24