1. 옵셔널 체이닝
•옵셔널 체이닝은 옵셔널의 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있음
•매번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있음
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | // 예제 클래스 // 사람 클래스 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 jinun: Person? = Person(name: "jinun") let apart: Apartment? = Apartment(dong: "101", ho: "202") 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: jinun) // 옵셔널 체이닝을 사용한다면 func guardJobWithOptionalChaining(owner: Person?) { if let guardJob = owner?.home?.guard?.job { print("우리집 경비원의 직업은 \(guardJob)입니다") } else { print("우리집 경비원은 직업이 없어요") } } guardJobWithOptionalChaining(owner: jinun) // 우리집 경비원은 직업이 없어요 jinun?.home?.guard?.job // nil jinun?.home = apart jinun?.home // Optional(Apartment) jinun?.home?.guard // nil // 경비원 할당 jinun?.home?.guard?.name // superman jinun?.home?.guard?.job // nil jinun?.home?.guard?.job = "경비원" | cs |
2. nil 병합 연산자
•중위 연산자임 ??
•Optional ?? Value
•옵셔널 값이 nil일 경우, 우측의 값을 반환
•띄어쓰기에 주의해야 함
1 2 3 4 5 6 7 8 9 | var guardJob: String guardJob = jinun?.home?.guard?.job ?? "슈퍼맨" print(guardJob) // 경비원 jinun?.home?.guard?.job = nil guardJob = jinun?.home?.guard?.job ?? "슈퍼맨" print(guardJob) // 슈퍼맨 | cs |
제 나름대로 생각을 정리하며 포스팅합니다.
정보전달에 있어 차질이 생기는 것을 우려해 나름대로 확실하게 검증을 하고 포스팅하려고 노력합니다.
본 포스팅에 잘못된 정보가 있거나 수정해야할 내용이 있다면 댓글 또는 아래의 이메일로 알려주시면 감사하겠습니다.
E-mail : silent_lhr@naver.com
공감은 로그인이 필요없습니다.
공감은 저에게 포스팅을 이어나갈 수 있는 힘이 됩니다.
'프로그래밍 [KOR] > Swift' 카테고리의 다른 글
Swift의 assert와 guard (0) | 2018.10.18 |
---|---|
Swift의 타입 캐스팅 (0) | 2018.10.17 |
Swift의 인스턴스의 생성과 소멸 (0) | 2018.10.15 |
Swift의 상속 (0) | 2018.10.11 |
Swift의 프로퍼티 감시자 (0) | 2018.10.11 |