STUDYING/Swift
Optional
EOZIN
2021. 10. 17. 14:42
728x90
Optional
Optional Type
Expression : ?
- 기본 구조
var myString: String? // Optional
var myString2: String = String() // Non-Optional 반드시 이니셜라이저 해야함. 값으로서 존재는 함
nil : 아무것도 없고 어떤 상태인지 모르는 전혀 존재하지 않는 상태
- 네트워크로 데이터를 받을 때 Optional 사용
- 값이 있는 상태를 가정해서 사용할 수 없음
- 값이 무조건 있다는것을 가정하는 방식인 Force Unwrapping : !
- 그러나 Force Unwrapping은 지양하는 것이 좋다.
안전하게 옵셔널을 제거하기 위해서 Optional Binding을 사용한다.
Optional Binding
옵셔널 바인딩은 nil인지, 아니면 값이 있는지, 경우에 따라 결과를 달리 하고 싶을 수 있을 때 사용해 옵셔널을 검사한다.
if let hasScore = myScore {
if hasScore < 50 {
// 값이 있을때만 적용됨
}
} else {
}
Optional Chaining
옵셔널 체이닝은 하위 property에 optional 값이 있는지 연속적으로 확인하면서, 중간에 하나라도 nil이 발견된다면 nil이 반환되는 형식이다.
class People {
var score: Score?
}
class Score {
var testName: String?
}
var people: People? = People()
if let hasName = people?.score?.testName {
if hasName == "eojin" {
}
}
Nil Coalescing Operator
값을 변경하지 않은 채, nil인경우 예외적으로 특정 값으로 표현된다.
var myScore: Int?
if myScore ?? 0 < 50 {
print("number")
}