質問: self.view! else { return } ``` するとoptional valueではないと怒られてしまいました。warningの内容は下記になります。 ``` Non-optional expression of type 'SKView' used in a check for optionals ``` !や?をつけないとエラーになるのにguardを使ってアンラップをするとoptionalじゃないと怒られて何が何だかわかりません。 どうするのが正解なのでしょうか?
回答: guard節は、letで宣言した変数がnilの場合に、else節を実行するものです。 letで宣言した変数がnilに成り得ない場合、guard節を使用する必要がないためビルドで弾かれます。 ``` // self.view: UIView? guard let view: SKView? = self.view else { // viewがnilなら、ここの処理が実行される return } // viewがnilでないなら、ここの処理が実行される ``` ``` let width: CGFloat = self.view.frame.width //× self.viewがnilの可能性があるため、ビルドで弾かれる let width: CGFloat = self.view!.frame.width // self.viewがnilでないことを宣言する ```