inblog logo
|
RN 삽질 일지

    [ Swift ] 옵셔널

    스위프트의 optional에 대하여!
    김보람's avatar
    김보람
    Oct 04, 2024
    [ Swift ] 옵셔널
    Contents
    [ 옵셔널 값 추출 방법 ]

    있을수도 없을수도 있는 값을 말하며
    ?(옵셔널 타입)와 !(암시적 옵셔널 타입)을 사용하여 나타낼 수 있고, 주석등을 달아 설명하지 않아도 코드만으로 nil의 허용을 알 수 있어 효율적이다.

    • 선언 방법

    let optionalValue : Optional<Int> = nil
    let optionalValue2 : Int? = nil

    • ?와 !의 차이점

      • ?의 경우 없을 수 있다를 전제하여 사용하기 때문에 사용하거나 추출시 없을 수 있음에 대비하여 코드를 작성해야하나 !의 경우 값이 있음을 전제하기에 없을 수 있음에 대비하여 코드를 구성하지 않아도 에러가 발생하지 않는다.
        하지만 런타임시 값이 없을경우 런타임에러를 반환할 수 있으므로 되도록 ?를 이용하자

    [ 옵셔널 값 추출 방법 ]

    • Optional Binding

      nil을 체크한 후 안전한 값을 추출함

      • if - let

        var num:Int? = nil
        if let n = num { 
        //num에 값이 있으면 n에 값이 할당되고 값이 할당되어야만 {}구문이 실행된다.
        //할당되어있지 않으므로 
             print("num은 비어있지 않음") //이 구문은 실행되지 않는다 
        }
        var num:Int? = nil
        
        num = 6 
        
        if let n = num { 
        //num에 6이 할당되었기에 아래 구문이 실행된다.
            print("num은 비어있지 않음")
        }
        • 체크해야할 값이 둘이상일 경우 아래와 같이 나열에서 작성해주어야하고 나열한 값들 모두 nil이 아닐경우에만 실행구문을 실행한다

          if let n = num, let n2 = num2 {}
          var num:Int? = nil
          var num2:Int? = nil
          
          num = 6
          
          func test  () -> Void {
              if let n = num, let n2 = num2 {
                  print(n + n2)
              }else{
                  print("값의 확인이 필요함")
              }
              
          }
          
          test() //출력 "값의 확인이 필요함"
          
          num2 = 10
          test() // 출력 16

    • Force Unwrapping

      값을 강제로 추출하는 방법으로 변수뒤에 !를 붙여주면서 이 변수엔 값이 존재하니 체크하지 않아도돼 하고 알려주는 것이다. 런타임까지 가야 값이 없을때 에러를 반환하므로 위험하다.

      func printName(name:String) -> Void{
          print(name)
      }
      
      var myName:String? = "영희"
      
      printName(name: myName!) //영희를 출력
      
      
      myName = nil
      
      printName(name: myName!)//값없음 에러 출력

    Share article
    Contents
    [ 옵셔널 값 추출 방법 ]

    김보람 | 930802qhfka@gmail.com

    RSS·Powered by Inblog