ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.