앞에서 작성한 옵셔널 코드에서 print를 찍어보면 아래와 같이 나온다.
var opotionalName: String? = "Duhyeon"
print(opotionalName)
//"Optional("Duhyeon")\n"
쉽게 풀어서 설명하면 Optional이라는 포장지 안에 "Duhyeon"이 들어가 있는 것이다. 이 상태는 일반 타입 변수와 결합, 연산 또한 할 수 없다.
그것을 해주는게 옵셔널 바이딩이다.
var number: Int? = 3
print(number) // Optional(3)
print(number!) // 3
number에 느낌표를 붙혀주면 옵셔널을 강제 해제 해준다. 하지만 이 방법은 굉장히 위험하다. 혹시라도 값이 nil일 경우 프로그램이 강제 종료가 되는 상황이 나올 수도 있기 때문에 좋은 방법은 아닌 것 같다.if let result = number {
print(result) // 3
}
만약 값 추출이 실패하면 else 구문이 실행이 된다.func test() {
let number: Int? = 5
guard let result = number else {return}
print(result)
}
test() // 5
guard문은 if문과 다르게 if문에서 optional을 해제 했다면 if문 안에서만 사용가능 하지만 guard문은 optional 해제 하고 함수 내부 어디서든 사용이 가능하다.
let value: Int? = 6
if value == 6 {
print("value가 6입니다.")
}else {
print("value가 6이 아닙니다.")
}
// value가 6입니다.
optional 값은 비교 연산자로 다른 값과 비교하면 컴파일러가 자동으로 옵셔널을 해제 시켜준다.let string = "12"
var stringToInt: Int! = Int(string)
print(stringToInt + 1)
// 13