[ swift - Optional ]

Yr Yr·2023년 11월 27일

TIL

목록 보기
10/39

옵셔널(Optional)

  • 값이 있을 수도 있고 없을 수도 있는 상황에서 옵셔널을 사용하며 ?로 나타낸다.

  • 옵셔널로 래핑해놓은 값을 언래핑하여 그 값에 접근할 수 있는 경우와 값이 전혀 없는 경우 두 가지 가능성이 있다.

  • 옵셔널 타입끼리의 연산은 불가능하다.

    	#### nil
    	 - 변수에 nil을 할당함으로써 값이 없는 상태의 옵셔널 프로퍼티를 만들 수 있다.

    옵셔널 바인딩

    • 옵셔널 값이 빈 값인지 검사한 후, 값이 존재한다면 그 값을 다른 변수에 대입시켜 바인딩하는 것

    • if let / if var / guard let / guard var를 써서 옵셔널 값을 추출해 새로운 변수에 바인딩한다.

    • if let은 if문의 코드 구현부 내에서만 상수 사용이 가능.(지역 변수)

    • guard let은 guard문을 통과한 상수를 guard문 밖에서 사용이 가능.(전역 변수)

      let friendsnumber: Int? = nil
      if let friends = friendsNumber {
          print(friends)
      }
      
      func opbinding() {
          guard let x = x else { return }
          print(x)
      
          guard let y = y else { return }
          print(y)
      }

      옵셔널 강제 언래핑

    • !를 써서 강제로 옵셔널을 추출한다.

    • 잘못 사용할 경우 프로그램이 비정상적으로 종료될 수도 있으므로 반드시 nil이 아닌 것이 확실한 상황에서 사용해야 한다. (최대한 지양)

      옵셔널 변수의 값이 nil일 때를 위해 기본값 설정하기

    • ??을 사용하여 기본값을 사용할 수 있는데, ??을 사용하여 기본값을 부여한 변수는 옵셔널 타입이 아니다.

    • let(var) a = b ?? c 형태로 이루어지는데 b는 옵셔널 타입이고, b가 nil일 경우 a에 c가 대입되고, nil이 아닐 경우 옵셔널을 제거한 값이 a에 대입된다.

      옵셔널 체이닝

    • 옵셔널을 연쇄적으로 사용하는 것

    • .을 통해 내부 프로퍼티나 메서드에 연속적으로 접근할 때 옵셔널 값이 있으면 옵셔널 체이닝으로 접근할 수 있다.

      struct Person {
          var name: String
          var address: Address
      }
      
      struct Address {
          var city: String
          var street: String
          var detail: String
      }
      
      let sam: Person? = Person(name:"Sam", address: Address(city:"서울",street:"신논현로",detail:"100")
      sam?.address.city

0개의 댓글