[ios/swift]Optionals(강제해제,옵셔널바인딩,옵셔널체이닝)

감자맨·2022년 7월 30일
0

swift

목록 보기
9/14
post-thumbnail

📒📕 📗📘📙📚📖 swift 문법을 공부하자!📒📕 📗📘📙📚📖

Optionals

nil은 변수 또는 상수에 값이 없을 수 있다 라는 뜻으로 해석하면 좋다.

옵셔널을 해제할 수 있는 방법은 총 3가지
!를 이용하여 강제 언래핑을 할수있다. 단 변수가 있는 상황이 보장된 경우에만 !를 이용해 값을 출력할 수 있다.

강제해제

!를 이용하여 강제 언래핑을 할수있다. 단 변수가 있는 상황이 보장된 경우에만 !를 이용해 값을 출력할 수 있다.
하지만 옵셔널을 강제로 해제 시키면 optional이 nil값을 가질때 에러가 생길 수 있으므로 권장하지 않음.

var num: Int? = 7
print(num) // Optional(7)
print(num!) // 7

옵셔널 바인딩

옵셔널 변수,상수의 값이 nil인지 체크하고 안전하게 값을 추출하는 방법. Binding은 옵셔널 표현식을 평가하여, 값을 리턴할 수 있으면(값이 저장되어 있으면) 언랩핑 되어서 상수에 저장된다.if-else, if let, if var, guard let 등으로 가능

이게 nil인지, 아니면 값이 있는지,경우에 따라 결과를 달리 하고 싶을 수 있을때, 옵셔널 바인딩을 사용하여 검사해주면 된다.

var height: Int? = 170

if let value = height {
    if value >= 160{
        print("Good!")
          }
        }
var myheight:Int? = 150

                                       // Good!
if let value = myheight, value >= 160{
         print("Great")
}else{
    print("wow")
}
                                      // wow

옵셔널 체이닝

옵셔널에 값이 있다면 프로퍼티, 메서드, 서브스크립트 등을 호출할 수 있고, 옵셔널이 nil이라면 nil을 반환한다.

이러한 옵셔널을 반복 사용하여 체인처럼 서로 꼬리를 물고 있는 모양을 옵셔널 체이닝이라고 한다.

중첩된 옵셔널 중 하나라도 값이 존재하지 않는다면 결과적으로 nil을 반환.

옵셔널 체이닝은 호출하고 싶은 옵셔널 변수나 상수 뒤에 ?를 붙여 표현.

struct Contacts {
    var email : String
    var address : [String : String]
}

struct Person2 {
    var name : String
    var contacts : Contacts

    init(name : String, email : String, address : String) {
        self.name = name
        contacts = Contacts(email: email, address: ["home" : address])
    }
}

var my : Person2? = Person2(name: "yoojin", email: "yjpotato@gmail.com", address: "seoul")

print(my?.name)             // yoojin
print(my?.contacts.email)   // yjpotato@gmail.com
profile
나는 코딩하는 감자다!

0개의 댓글