[swift]デフォルト構文-傍観者


있을 수도 있고, 없을 수도 있어は先鋒を見守るという意味です!
これは、変数または定数に値があることを保証できないことを意味します.すなわち、変数や定数の値はnilである可能性があります!
気まずいでしょう?
よく聞いてみなさい.レツゴ

外来の


コードで肉眼で確認!
var myName: String = "ian"
myName = nil // 오류 !
var myName: String? = "ian"
myName = nil 
print(myName) // nil
2つの和弦の違いが見えますか?
上のコードにエラーが表示され、下のコードは正常に動作しています.myName: Stringの後ろに疑問符があるかどうか、あなたの処理を確認することができます!?を通じて、nilの価格に達することができます!発表しました!
傍観者は列挙の形で実施されています!
見張りパイオニアの定義を理解しましょうか?
public enum Optional<Wrapped> : ExpressibleByNilLiteral {
    /// The absence of a value.
    ///
    /// In code, the absence of a value is typically written using the `nil`
    /// literal rather than the explicit `.none` enumeration case.
    case none

    /// The presence of a value, stored as `Wrapped`.
    case some(Wrapped)

    /// Creates an instance that stores the given value.
    public init(_ some: Wrapped)
守望先鋒はジェニーンリックに適した開放型だ.
また、ExpressibleByNilLiteralプロトコルに従っていることもわかります.
後ろのcase noneは値なしのキャビネットであり、case someは値付きのキャビネットであり、相関値はWrappedである.したがって、外部値が存在する場合、関連付けられた値Wrappedの一部に値が指定されます.
つまり、Operinalという枚挙型の盾に守られている様子を想像することができます!

抽出


傍観者の値を非傍観者の値に抽出する方法があります!

強制抽出


これは!と書く方法です.これは最も簡単だが最も危険な方法なので、できるだけ使わないことをお勧めします.
強制抽出時に終了プログラムに値(nil)がない場合、実行時エラーが発生します.
var myName: String? = "ian"
var ian: String = myName!

myName = nil
ian = myName! // 런타임 오류 !

if myName != nil {
    print("제 이름은 \(myName) 입니다 ! ")
} else {
    print("myName == nil")
}
// myNmae -== nil
実行時にエラーが発生する可能性が常にあるため、外部強制抽出メソッドの使用は避けてください.

外部バインド


強制抽出よりも安全でスタイリッシュです!ifまたはwhile文などと組み合わせて使用できます.
var myName: String? = "ian"

// 옵셔널 바인딩을 통한 임시 상수 할당
if let name = myName {
    print("제 이름은 \(name) 입니다 !")
} else {
    print("myNmae == nil")
}
// 제 이름은 ian 입니다 !

// 옵셔널 바인딩을 통한 임시 변수 할당
if var name = myName {
    name = "치킨" // var 변수이므로 내부에서 변경이 가능합니다 !
    print("제 이름은 \(name) 입니다")
} else {
    print("myName == nil")
}
// "제 이름은 치킨 입니다"
斜行if文法のブロックの内部にnameという定数があるのを見ましたか?
パスワードを安全にバインドし、name定数に入れます.
なぜ守望先鋒を使うのですか?
プログラマー同士のシームレスなコミュニケーションに使用!
func optionalTest (name: String?) {
    print(name)
}
// optionalTest 에는 String과, nil 값이 들어가야 되는구나 !

func optionalErrorTest (name: String) {
    print(name)
}
// optionalErrorTest 에는 무조건 String이 들어와야 되는구나 !
推測できるから!
出典:Sweet Programming(野熊)、iOSプログラミングのSweet基礎(野熊)