안녕하세요, Annie 입니다 :)
이번에 Swift에만 도입된 새로운 개념, 옵셔널 (Optional)에 대해
공부해보겠습니다.
옵셔널이란 옵셔널로 감싸진 값을 가지고 있거나 nil 을 가지고 있다는 것을 나타내는 타입이다.
쉽게 말해서 옵셔널이란,어떤 변수(상수)가 값을 가질 수도 있고 nil 값을 가질 수도 있음을 알려주는 표현방법
이다.
옵셔널 값이 nil이 아닌 경우, 값은 Optional로 감싸져 있기 때문에,
unwrapping 하여 값을 사용해야 한다 (옵셔널 바인딩)
옵셔널 값을 나타내기 위해 변수의 타입에 ?를 붙이거나
Optional<> 으로 나타낼 수 있다.
let shortForm: Int? = Int("42")
let longForm: Optional<Int> = Int("42")
위의 두 변수는 모두 옵셔널 Int값을 가진다.
옵셔널 값으로 감싸져있는 속성이나 메서드에 ?를 붙여 옵셔널를 벗길 필요 없이 값에 접근 하는 방법.
if imagePaths["star"]?.hasSuffix(".png") == true {
print("The star image is in PNG format")
}
위의 코드를 보면 imagePaths["star"]에 ?를 붙임 으로써 옵셔널 값을
벗겨낼 필요 없이 값이 접근 할 수 있다.
? 없이 imagePaths["star"].hasSuffix(".png") 로 작성하는 경우
에러가 발생한다.
옵셔널 객체를 새로운 변수에 담으면서, 옵셔널 값을 벗겨내는 방법.
'if let', 'guard let','switch' 를 이용하여 옵셔널 바인딩을 할 수 있다.
class SecondViewController: UIViewController {
@IBOutlet weak var textColorButton: UIButton!
@IBOutlet weak var sendButton: UIButton!
@IBOutlet weak var resultLabel: UILabel!
@IBOutlet weak var userTextField: UITextField!
@IBOutlet var buttonList: [UIButton]!
if let starPath = imagePaths["star"] {
print("The star image is at '\(starPath)'")
} else {
print("Couldn't find the star image")
}
func printMeaningOfLife() {
guard let name = getMeaningOfLife() else {
return
}
print(name)
}
nil 인 경우에 return 을 함으로써 함수를 빠져나갈 수 있다는게
if let 과 다른 부분이다.
let capital: String? = "London"
switch capital {
case .none:
print("value is nil")
case .some(let capital):
print("value is \(capital)")
}
참고 :