[Swift] [iOS 공부하면서 햇갈린것들]Optional이란
Swift를 하면서 어려웠던 문법 중 하나는 Optional이다
Swift가 갖는 Optional이라는 개념은 변수의 값이 nil일 수 있다는 것을 표현
선언
var name: String?
옵셔널 변수의 이용
옵셔널 변수는 nil을 가질 수 있는 특별한 변수다.
var email: String이면 email이라는 변수는 무조건 문자열을 가지고 있어야한다. 하지만 var email: String? 이라면 안가지고 있어도 된다는 의미이다.
만약
var number1: Int? = 20
var number2: Int = 20
이 있을때 Int와 Int?의 연산을 시도하면 컴파일 단계에서 에러를 발생시킨다. number1은 옵셔널이기 때문에 nil 값을 가질 수 있고, non-optional일 경우는 nil 값을 가질 수 없다.
이를 해결하기 위한 방법 unwrapping, binding
Opitonal Unwrapping
if number1{
let sum = number1! + number2!
}
if로 optional 변수 값이 nil이 아닌지 판단하고, ! 를 사용해서 강제로 값을 빼온다
Optional Binding(옵셔널 바인딩)
if let nonoptional = number1 {
let sum= nonoptional + number2
} else {}
Optional chaining
let array: [String] ? = []
var isEmptyArray = false
if let array = array.isEmpty{
isEmptyArray = true
} else {
isEmptyArray = false
}
이 코드를 옵셔널 체이닝을 활용하여 더 간단히 사용할 수 있다.
let isEmptyArray = array?.isEmpty == true
옵셔널 체이닝을 활용해 isEmpty의 반환값은 Bool이었지만, Bool?을 반환하라고 바뀐것
옵셔널은 언제 사용하는 걸까??? 가급적이면 일반적인 옵셔널을 사용해서 정의하고, 옵셔널 바인딩 또는 옵셔널 체이닝을 통해 값에 접근하는 것이 바람직하다.