옵셔널 타입의 응용

Ios_Roy·2023년 3월 5일
0

swift 문법

목록 보기
17/29
post-thumbnail

옵셔널 체이닝 (Optional Chaining)

  • 옵셔널타입에 대해 접근연산자를 사용하는 방법
  • 옵셔널타입에 대해, "접근연산자"를 사용할때, ?(물음표)를 붙여서, 앞의 타입이 값이 nil을 가질 수도 있음을 표시
  • 옵셔널체이닝의 결과는 항상 옵셔널이다.
  • 옵셔널체이닝에 값 중에서 하나라도 nil을 리턴한다면, 이어지는 표현식을 평가하지 않고 nil을 리턴
class Dog {
    var name: String?
    var weight: Int
    
    init(name: String, weight: Int) {
        self.name = name
        self.weight = weight
    }
    
    func sit() {
        print("\(self.name)가 앉았습니다.")
    }
    
    func layDown() {
        print("누웠습니다.")
    }
}

class Human {
    var dog: Dog?
}

// 옵셔널타입에 대해, "접근연산자"를 사용할때, ?(물음표)를 붙여서, 앞의 타입이 값이 nil을 가질 수도 있음을 표시

var choco = Dog(name: "초코", weight: 15)
choco.name
choco.sit()
//choco?.name = "초코얌"
//choco?.sit()              // Optional("초코얌")가 앉았습니다.

//var human = Human()
//human.dog = choco
//human.dog?.name
//print(human.dog?.name)     // Optional("초코얌")

var human2: Human? = Human()
human2?.dog = choco
human2?.dog?.name
print(human2?.dog?.name)      // Optional("초코얌")

옵셔널 체이닝에서 함수의 실행은?

  • 옵셔널 타입에 접근해서 사용하는 함수는 앞의 타입을 벗기지 않아도 사용가능 함.
    (함수자체가 옵셔널 타입은 아니기 때문에 함수를 벗겨서 사용할 필요없음)
  • 함수가 리턴형이 없는 경우
    • 타입에 값이 있으면 함수실행
    • 타입에 값이 없으면 nil
  • 함수가 리턴형이 있는 경우
    • 타입에 값이 있으면 옵셔널 리턴 타입으로 반환 (원래 리턴형이 옵셔널이 아니더라도)

    • 타입에 값이 없으면 nil로 반환

      var bori: Dog? = Dog(name: "보리", weight: 20)
      
      bori?.layDown()          // ⭐️ 앞의 타입이 옵셔널이라고 해서 메서드가 실행이 안되는 것은 아님
      bori?.sit()              // Optional("보리")가 앉았습니다.
      
      bori = nil
      bori?.layDown()          // 타입의 값이 nil이면, 함수가 실행이 되지 않고 nil을 반환
profile
iOS 개발자 공부하는 Roy

0개의 댓글