1. ホーム
  2. swift

[解決済み] Swiftでオプショナルをダウンキャストする:as? タイプ、または as! タイプ?

2023-01-01 02:23:33

質問

Swiftで次のように記述します。

var optionalString: String?
let dict = NSDictionary()

次の2つの文の実際的な違いは何ですか。

optionalString = dict.objectForKey("SomeKey") as? String

optionalString = dict.objectForKey("SomeKey") as! String?

どのように解決するのですか?

現実的な違いはこうです。

var optionalString = dict["SomeKey"] as? String

optionalString は型変数 String? . もし、基礎となる型が String でない場合、これは単に nil をオプショナルに割り当てるだけです。

var optionalString = dict["SomeKey"] as! String?

これは、私 知っている このことは String? . これも結果的に optionalString という型になります。 String? , しかし を指定すると、基礎となる型が他のものである場合にクラッシュします。

最初のスタイルは if let を使ってオプショナルを安全にアンラップします。

if let string = dict["SomeKey"] as? String {
    // If I get here, I know that "SomeKey" is a valid key in the dictionary, I correctly
    // identified the type as String, and the value is now unwrapped and ready to use.  In
    // this case "string" has the type "String".
    print(string)
}