Optionals


  • の傍観者が格納した値を使用するには、値をマッピング解除する必要があります.
  • nilを保存した場合に強制的に値を抽出するとクラッシュします.
  • 定義式を非パッケージ化すると、非限定タイプとして抽出されます.
  • let str : String = "Swift" // Non-optional Type
    
    str = nil // 컴파일 에러, 항상 값을 가져야 하기 떄문이다.
    
    let str2 : String? = nil // optional String 이라 읽는다. 값을 저장하지 않아도 되는 형식으로 된다.
    
    let a : Int? = nil // optional Int
    
    let b = a // Int타입이 아닌 optional Int다
    

    Forced Unwrapping


    print(num) // 래핑된 상태
    
    print(num!) // !를 통해 강제로 랩핑을된 값을 추출하는방법
    
    num  = nil
    
    print(num!) // 하지만 강제로 랩핑된 값이 nil이라면 에러가 발생된다.
    
    if num != nil { // 값이 있을때만 아래 문장을 실행하기떄문에 위의 에러가 발생되지는 않는다. 
                       하지만 크레쉬가 발생될 가능성 떄문에 강제 추출을 권장하진 않는다.
        print(num!)
    }
    
    num = 123
    let before = num // optional Int
    let after = num! // 강제 추출하게되어 Int