본문 바로가기

iOS 프로그래밍/문법

[swift] 문법정리6 (옵셔널 체이닝)

옵셔널 체인

- 옵셔널 체인으로 클래스나 구조체의 속성을 참조할 경우 클래스의 값이 nil이어도 오류가 발생하지 않는다

- 옵셔널 체인으로 읽어낸 마지막 값이 일반 타입이라도 모두 옵셔널 타입으로 리턴된다

- 옵셔널 타입으로 정의된 값이 자식 프로퍼티나 메서드를 가지고 있을 때, 다중 if를 쓰지 않고 간결하게 코드를 작성하기 위해 쓰인다

- 옵셔널 타입의 데이터는 연산이 불가능하다. 하지만 연산을 해야한다면 옵셔널 타입의 데이터를 다시 한번 옵셔널 타입으로 변경하면서 해제를 시킬 수 있다.

 

class Person {
    var name : String?
    var age : Int?
    var sns : SNS? = SNS()
}

class SNS {
    var fb : FaceBook? = FaceBook()
    var tt : Twitter?
}

class FaceBook {
    var account : String = "aaa@naver.com"
}

class Twitter {
    var account : String = ""
}

let p = Person()

if let s = p.sns {
    if let f = s.fb {
        print("1: \(f.account)")
    }
}

if let account = p.sns?.fb?.account {
    print("2: \(account)")
}

print("3: \((p.sns?.fb?.account)!)")

print("4: \(p.sns!.fb!.account)")

print("5: \(p.sns?.tt?.account)")

// print("6: \(p.sns!.tt!.account)") //오류

참고: https://blog.yagom.net/559