옵셔널
옵셔널: 값이 있을 수도 있고 없을 수도 있게 만드는것
nil : 값이 없음을 나타내는 키워드
옵셔널 맛보기
아래의 예시에서 name1과 name2 변수생성은 값이 있거나 오류가 난다.
옵셔널을 이용한 name3와 name4 변수생성이 값이 없는 변수를 만들 수 있다.
var name0: String = "" //값이 없는게 아니라 빈문자열 이라는 값을 가지고 있다.
var name1: String = nil //Error(문자열에 nil을 저장할 수 없다)
//문자열에 nil을 적용하려면 옵셔널을 사용해야 한다.
var name2: String? = nil // nil
//또는
var name3: String? //nil
옵셔널 선언과 출력값 확인
var lable1: String? // nil
var lable2: String? = "swift" //"swift"
//var lable3: String = lable2 //Error (둘 다 옵셔널 선언이 없거나 선언 되어있어야 한다.)
print(lable2)
____________________출력
Optional("swift")
옵셔널바인딩
명시적 해제
- 강제해제
- 주의사항 : 값이 nil인 변수를 강제해제하면 에러가 발생해 프로그램이 강제 종료 될 수 있다.
//강제해제
var number: Int? = 3
print(number)
print(number!)
------------------------------
Optional(3)
3
//if문을 이용한 비강제해제
var number: Int? = 3
if let result = number{
print(result)
} else {
}
------------------------------
3
//guard문을 이용한 비강제해제
var number: Int? = 3
func test(){
let number: Int? = 5
guard let result = number else { return }
print(result)
}
test()
------------------------------
5
묵시적해제
- 컴파일러에 의한 자동해제
- 옵셔널값을 비교연산자를 이용해 비교하면 컴파일러가 자동적으로 옵셔널 해제 후 비교
//컴파일러에 의한 자동해제
let value: Int? = 6
if value == 6 {
print("value가 6입니다.")
} else {
print("value가 6이 아닙니다.")
}
------------------------------
value가 6입니다.
//값 변환
let string = "12" //"12"
var stringToInt: Int? = Int(string) //String을 Int로 변환한 값을 넘겨받는다. // 12
print(stringToInt)
------------------------------
Optional(12)
//묵시적 해제
//대신에 !를 사용하면 묵시적 해제를 사용하여 변수를 사용할 수 있다.
let string = "12"
var stringToInt: Int! = Int(string)
print(stringToInt + 1)
------------------------------
13
End