-
[Swift] 옵셔널 체이닝(Optional Chaining)iOS/Swift 2022. 8. 11. 20:51
옵셔널 체이닝이란?
💡 옵셔널이 중첩되어 있을 때 유용하게 사용할 수 있는 옵셔널 내부 요소의 프로퍼티이다
- 중첩된 옵셔널 중 하나라도 값이 존재하지 않는다면 nil을 반환한다
// ============== < 1. 클래스, 구조체 설계 > ============== class Room { var RoomNum: Int init(RoomNum: Int) { self.RoomNum = RoomNum } } class Building { var name: String var room: Room? init(name: String) { self.name = name } } struct Address { var building: Building? var city: String init(city: String) { self.city = city } } class Person { var name: String var address: Address? init(name:String) { self.name = name } } // ============== < 2. 인스턴스 생성 > ============== let yeonsu: Person = Person(name: "yeonsu") // ============== < 3. 옵셔널 체이닝(1.Ver) > ============== let yeonsuInfo: Any? = yeonsu.address?.building?.room?.RoomNum print(yeonsuInfo) // => 아직 값을 할당하지 않았기 때문에 nil 값이 반환된다 // ============== < 3. 옵셔널 체이닝(2.Ver) > ============== if let roomNumber: Int = yeonsu.address?.building?.room?.RoomNum { print(roomNumber) } else { print("She has no room") } // ============== < 4. 옵셔널 체이닝을 통한 값 할당 > ============== yeonsu.address = Address(city: "경기도 파주시") yeonsu.address?.building = Building(name: "연수프라자") yeonsu.address?.building?.room = Room(RoomNum: 0) yeonsu.address?.building?.room?.RoomNum = 101 print(yeonsu.address?.building?.room?.RoomNum)
빠른 종료
키워드: guard
if 구문과 유사하게 사용하지만 차이점이 존재한다!
- Bool 타입의 값으로 동작한다
- guard 뒤의 코드가 true일 경우 코드가 계속 실행된다
- 항상 else 구문이 따라와야 한다for i in 0...3 { guard i == 1 else { continue } print(i) }
코드들의 실행 결과 'iOS > Swift' 카테고리의 다른 글
[Swift] 모나드(Monad) (0) 2022.08.15 [Swift] 맵, 필터, 리듀스(map, filter, reduce) (0) 2022.08.15 [Swift] 클로저 (0) 2022.08.09 [Swift] 접근 제어 (0) 2022.08.05 [Swift] 랜덤 숫자 만드는 방법(Randomisation) (0) 2022.08.04