Language/Swift

swift optional chain

jaewpark 2022. 8. 24. 16:01

optional 타입은 nil이 할당될 수도 있는 값을 의미합니다.

struct Human {
    var name: String?
    var man: Bool = false
}

struct Univ {
    var univName: String?
    var student: Human?
}

var universityStudent: Univ? = Univ(univName: "Harvard", student: Human(name: "Bill", man: true))

if let univ = universityStudent {
    if let student = univ.student, let universityName = univ.univName {
        if let name = student.name {
            print("\(universityName) 대학교 다니는 \(name)입니다")
        }
    }
}
if let name = Human.name 과 같이 안정성 여부를 검사해야 합니다.
강제로 해제할 경우 예상치 못한 오류를 발생시킬 수 있습니다.

 

optional을 하나하나 확인하기보다는 optional 체인으로 사용을 하면 한 줄로 줄일 수 있습니다.

  • 옵셔널 체인으로 참조된 값은 무조건 옵셔널 타입으로 반환합니다.
  • 옵셔널 체인 과정에서 옵셔널 타입들이 여러번 겹쳐 있더라도 중첩되지 않고 한 번만 처리됩니다.

 

struct Human {
    var name: String?
    var man: Bool = false
}

struct Univ {
    var univName: String?
    var student: Human?
    func getStudent() -> Human? {
        return self.student
    }
}

var universityStudent: Univ? = Univ(univName: "Harvard", student: Human(name: "Bill", man: true))

if let name = universityStudent?.getStudent()?.name {
  print("학생의 이름은 \(name) 입니다")
}
name에 대한 값을 반환받기 위해 Human을 반환하는 메소드를 추가하였습니다.