迅速

2016-06-20 13 views
0

私はガードを使用して好きで、私もです。TypeCheckためwhereを使用したい状況に出くわした:迅速

guard let status = dictionary.objectForKey("status") as! String! where status is String else { ...} 

Xcodeのは、それは常に真実だということを正しく文句を言います。

私の目標は、ガードの後に​​アンラップされた文字列を1行につけることです。

どうすればいいですか?

+0

を生産するので、あなたはそれが文字列だチェックしたいですか? – Wain

+0

申し訳ありませんが、私はすでにそれがStringであることを知っているので、キャストしたいと思います。 –

+2

@lukas_o "Shadow Of"の答えが正しいです。 – Fogmeister

答えて

5

おそらくこれが欲しいですか?

guard let status = dictionary["status"] as? String else { 
    // status does not exist or is not a String 
} 

// status is a non-optional String 
+0

偉大な、ありがとう!あなたが最初だったので、私はあなたに小切手を渡すつもりです。 –

2

あなたはあなたがあなたの辞書内のオブジェクトはStringでなければならないことを知ってそのスウィフトを伝えるas! String!使用しています。実行時にオブジェクトがStringでない場合、Swiftはキャスト例外をスローします。そのため、あなたの小切手のwhere部分が失敗することはありません:statusStringになるか、whereの前に例外が発生します。

as!の代わりにas?演算子を使用して、オプションのキャストを行うことができます。 guard letと相まって、このアプローチは

guard let status = dictionary.objectForKey("status") as? String else { ... } 
... // If you reached this point, status is of type String, not String?