オプションのバインド


オプションのバインド
オフセットバインドは、オフセットを強制的に開く方法ではなく、オフセットを安全にチェックして展開する方法です.すなわちif文を用いて傍観者に割り当てられた値を一時変数または定数に割り当てる.
Force unwrapping : !強制抽出
Optional Binding:if let,guard let受信の抽出に使用
if letまたはifvarを使用して、傍観者の値が存在するかどうかを確認し、存在する場合は他の変数に値を代入します.傍観者に価値があればifゲートに入り、nilなら通過する方法です!このように確認して包装を開くと、強制的に包装を開くよりずっと安全になります.
強制推理を使用しない
let x : Int? = 10
let y : Int? = nil

if let xx = x {
    print("x = \(xx)")
}
else {
    print("x is Optional")
}

if let yy = y {
    print("y = \(yy)")
}
オフセット定数xおよびオフセット定数yでは、それぞれ10およびnilに初期化される.強制してUnlappingした後にx!y!コードで書けば、y!エラーが発生します.ただし、傍観者バインドを使用して上記のコードとともに使用すると、xの値を持つxがxxに代入され、if文が実行され、nilの値を持つyはyyに代入できずに直接通過する.

結果もいいですね.強制展開よりも外部バインドを使用することで、より安全に展開できます.
複数の傍観者をバインド
傍観者バインドを行う場合は、カンマで区切ることができる複数の変数または定数を同時に使用できます.
let name1 : String?
let name2 : String?

name1 = "Song"
name2 = "Kim"

if let nameFirst = name1,
   let nameSecond = name2 {
    print(nameFirst, nameSecond)
}

guard let
守望パイオニアバインドを行う場合はifletだけでなくguard letもよく用いられる.二つの差は多くないが、少し違いがある.まずコードを書いてguard letを理解する
let x : Int? = 10
let y : Int? = nil

func opbinding() {
    
    guard let xx = x else {
        return print("x is Optional")
    }
    print(xx)

    guard let yy = y else {
        return print("y is Optional")
    }
    print(yy)
}

opbinding()
上記のようなコードを作成しました.見張りパイオニア定数xと見張りパイオニア定数yをそれぞれ10とnilに初期化し,今回はguard letを用いて見張りパイオニアを抽出する.if letは構文と似ていますが、guard letはelse部分しか作成できません.すなわち,nilの値で間接抽出ができない場合にのみ,いかなる行動をとることができる.nil値ではないことを確認してoutsialを抽出したらguard let文を通過します!ここで重要なのは、guard let文を通過すると、格納された定数がグローバル変数として使用できることです.使いやすい!
guard letのelse文では、常に文を返すか、投げ出す必要があります.ここでthrow文は例外処理文なので、後でよく勉強しましょう!上のコードはreturnを記述しています.関数にguard let文があるからです.

if let vs guard let


*ゾーン変数、グローバル変数
この2つのフレーズはOptional Bindingの代表です.でも細かい違いがあるのでどんな違いなのか確認してみましょう
guard let yy = y else {
        return print("y is Optional")
    }
    print(yy)
guard letは,抽出に失敗してfalseとなる上記コードに示すelse問題のみを制御できる.定数に外部値を指定すると、guard letは上記のコードのグローバル変数として使用できます.すなわちguard letはドアの外でも分配定数を自由に使用できる.
if let xx = x {
        //xx는 여기서만 사용가능
    }
    else {
        print("x is Optional")
    }
    print(xx) //error!
if letの場合、falseに失敗したelse文と成功したelse文の外来抽出を制御できます.ただし、割当定数はif文でのみ使用できます.上記のコードのように実行すると、xxは領域変数であるため、エラーが発生します.

今日は外来バインドについて勉強しました強制抽出よりもずっと安全な方法なので、必ずこのようにワイルドカードでワイルドカードを抽出しなければなりません.