2017-09-06 4 views
2

私のような非オプションメンバーのカップルを持っている1のViewControllerで構造を有しているが返されますlet temp = ViewController.MyStruct(id: 10, name: "Example"))、Segue経由で構造体を作成した場所に渡します。 temp.checkValues()を実行するとき、私は私が!で変数を宣言したので、私はOptional()を取得するべきではない(非)optionalsの私の理解からは、オプションの値

id: Optional(10) name: Optional("Example") 

を取得します。私は間違っていたのですか?今私はそれを使用するたびに感嘆符を付けます。私も構造体でinitを使用しようとしましたが、何も変更されませんでした。 これは意図した通りではないので(私が正しいとすれば)私は完全なコンセプトを得られなかったのではないかと心配しています...私のコード/私に何が間違っているか教えてください。

答えて

7

私はそれが誤解していましたか?

はい。変数オプションです - !演算子は強制アンラップ演算子なので、変数はで暗黙的にアンラップされますです。変数をオプションにしたくない場合は、!をドロップしてください。

!演算子は、IBOutlet変数のように、Objective-Cからのブリッジングを容易にするためにSwiftに存在します。 !演算子を使用することは悪いことです。

+0

ありがとう!それは意味があります...私は間違った印象を与えました! 'を追加すると、私はそれらがオプションではないことを確かめます... – Michael

5

!は、であり、暗黙的にアンラップされた任意のである。 !で終わるすべての変数宣言の型は、オプションでです。あなたはそれらをOptionalであると宣言する必要はありません。ただ、通常はそれらを使用し、初期化子は彼らの世話をします。

struct MyStruct { 
    let id: Int64 
    let name: String 
    func checkValues() -> Bool { 
     print("id: \(id) name: \(name)"); return true 
    } 
} 
+0

はい、ありがとうございます。それは意味をなさない... – Michael

関連する問題