- 옵셔널 개념익히기.
- 옵셔널 바인딩 개념익히기.
- 옵셔널 체이닝 개념익히기.
Swift언어 특성에서 한가지인 안전성(Safe)의 기능중 하나인 옵셔널에 대해 알아봅시다.
-> 옵셔널은 값이 있을 수도 없을 수도 있다. 를 의미합니다.(값을 가지지 않아도 되는 형식)
값이라 하면 상수나 변수 선언할 때 = 뒤에오는 값을 문자나 숫자등 타입의 값을
할당하는걸 뜻하는데 여기서 정수형의 0 이나 문자 " "는 빈 값이 아니예요.
swift에서는 값이 비었다는 표현을 nil키워드로 표현합니다.
nil키워드를 사용시에는 추론할 형식이 없으므로 타입어노테이션이 필수!!
var str: String = "" // 빈 값이 아님.
var str1: String = nil // 값이 없을을 표현했지만 오류 발생!
두번 째 변수인 str1에다가 nil이라는 값이 없을을 표현했지만 오류가 나는 이유가 무엇일까요?
여기서 옵셔널을 사용하는 방법을 알아보아요. 옵셔널을 표현 할 때에는 타입어노테이션 옆에
?를 붙이거나 강제추출을 의미하는 !를 붙여서 사용합니다.
var str1: String? = nil // nil
이렇게 String?을 사용해서 nil값을 주었더니 더 이상 오류가 발생하지 않아요.
var name: string? = "jamking" // 옵셔널로 표현해도 값 할당가능.
print(name) // Optional("jamking")
옵셔널로 표현해서 "jamking"의 문자열 값을 넣어주고 print()를 통해서 값을 출력했더니
Optional("jamking") 라는 결과가 나왔어요!!
Optional이라는 걸 표현한건데 그럼 Optional를 없애고 "jamking"만 출력하고싶을때는
어떻게 해야할까요? 여기서 강제언래핑(Forced Unwrapping)을 배워볼게요.
강제언래핑은 !를 붙여서 사용하면 된답니다.
var name: string? = "jamking" // 옵셔널로 표현해도 값 할당가능.
print(name!) // "jamking"
이렇게 출력할 변수뒤에 !를 붙이게되면 Optional이 사라지고 언래핑되어서 "jamking"만
출력이 되는것을 볼수있어요 :)
단, 값이 없는 상태에서 강제추출을 하게되면 오류가 발생하므로 꼭 값이 있는지 없는지 확인을 해야해요!! 확인을 할때에는 if문을 활용하면돼요~
var num: Int? = nil
if num != nil {
print(num!)
} else {
print("empty")
}
//"empty"
자, 위에서 옵셔널에 대해서 알아보았어요. 그렇다면 어떻게 옵셔널의 변수값을 가져올 수 있는지에 대해 알아볼게요!!
옵셔널 바인딩은 값을 안전하고 직관적으로 추출하기 위해서 사용하는데요.
if, while, guard문에서 모두 사용가능하답니다.
if문을 통한 바인딩 표현 방법입니다.
if let Name: Type = Optional Expression { statements }
-> let Name: Type = Optional Expression 이 부분이 바인딩입니다.
var num: Int? = nil
if let n = num {
print(n)
} else {
print("empty")
}
// empty
값이 리턴이 된다면 언래핑되어 상수에 저장되어요.
guard문은 else가 항상 붙기때문에 else블록 다음의 코드가 실행되겠죠?
var str: String? = "str"
guard let str = str else {
fatalError()
}
print(str) // str
IUO는 암시적(자동) 추출 옵셔널입니다.
사용방법은 Type! 인데 어디서 많이 봤죠??
아웃렛 변수를 연결할 때 많이 사용했는데요!!
@IBOulet var clickButton: UIButton!
이렇게 아웃렛 변수같은 경우는 값이 있다는 것을 확신할 수 있기에 !를 붙인답니다.
맞아요~ 강제언래핑은 값이 있다는 것을 확신할 수 있다라는 부분에서 사용하시면 됩니다.