//: Playground - noun: a place where people can play

import Swift



// 예제 클래스

// 사람 클래스

class Person {

    var name: String

    var job: String?

    var home: Apartment?

    

    init(name: String){

        self.name = name

    }

}


// 사람이 사는 집 클래스

class Apartment {

    var buildingNumber: String

    var roomNumber: String

    var `guard`: Person?

    var owner: Person?

    

    init(dong: String, ho:String){

        buildingNumber = dong

        roomNumber = ho

    }

}


// 옵셔널 체이닝 사용

let myName: Person? = Person(name: "myName")

let apart: Apartment? = Apartment(dong:"102", ho:"303")

let superman: Person? = Person(name: "superman")


// 옵셔널 체이닝이 실행 후 결과값이 nil일 수 있으므로 결과 타입도 옵셔널입니다.


// 만약 우리집의 경비원의 직업이 궁금하다면?


// 옵셔널 체이닝을 사용하지 않는다면...

func guardjob(owner: Person?){

    if let owner = owner {

        if let home = owner.home {

        if let `guard` = home.guard {

            if let guardJob = `guard`.job{

                print("우리집 경비원의 직업은 \(guardJob)입니다")

            }else {

                print("우리집 경비원은 직업이 없어요")

            }

        }

    }

  }

}

guardjob(owner:myName)


// 옵셔널 체이닝을 사용한다면

func guardJobWithOptionalChaining(owner:Person?){

    if let guardJob = owner?.home?.guard?.job{

        print("우리집 경비원의 직업은 \(guardJob)입니다")

    }else {

        print("우리집 경비원은 직업이 없어요")

    }

}




guardJobWithOptionalChaining(owner: myName)

// 우리집 경비원은 직업이 없어요


myName?.home?.guard?.job // nil


myName?.home = apart


myName?.home //Apratment


myName?.home?.guard //nil


// 경비원 할당


myName?.home?.guard = superman


myName?.home?.guard //Person


myName?.home?.guard?.name //superman


myName?.home?.guard?.job //nil


myName?.home?.guard?.job = "경비원"




/*

- nil 병합 연산자

중위 연산자입니다.??

optional ?? value

옵셔널 값이 nil일 경우, 우측의 값을 반환합니다.

띄어쓰기에 주의하여야 합니다.

 */


var guardJob: String


guardJob = myName?.home?.guard?.job ?? "슈퍼맨"

print(guardJob) // 경비원


myName?.home?.guard?.job = nil


guardJob = myName?.home?.guard?.job ?? "슈퍼맨"

print(guardJob) // 슈퍼맨





+ Recent posts