私はガードを使用して好きで、私もです。TypeCheckためwhere
を使用したい状況に出くわした:迅速
guard let status = dictionary.objectForKey("status") as! String! where status is String else { ...}
Xcodeのは、それは常に真実だということを正しく文句を言います。
私の目標は、ガードの後にアンラップされた文字列を1行につけることです。
どうすればいいですか?
私はガードを使用して好きで、私もです。TypeCheckためwhere
を使用したい状況に出くわした:迅速
guard let status = dictionary.objectForKey("status") as! String! where status is String else { ...}
Xcodeのは、それは常に真実だということを正しく文句を言います。
私の目標は、ガードの後にアンラップされた文字列を1行につけることです。
どうすればいいですか?
おそらくこれが欲しいですか?
guard let status = dictionary["status"] as? String else {
// status does not exist or is not a String
}
// status is a non-optional String
偉大な、ありがとう!あなたが最初だったので、私はあなたに小切手を渡すつもりです。 –
あなたはあなたがあなたの辞書内のオブジェクトはString
でなければならないことを知ってそのスウィフトを伝えるas! String!
使用しています。実行時にオブジェクトがString
でない場合、Swiftはキャスト例外をスローします。そのため、あなたの小切手のwhere
部分が失敗することはありません:status
はString
になるか、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?
を生産するので、あなたはそれが文字列だチェックしたいですか? – Wain
申し訳ありませんが、私はすでにそれがStringであることを知っているので、キャストしたいと思います。 –
@lukas_o "Shadow Of"の答えが正しいです。 – Fogmeister