意味的に言えば、[String:AnyObject?]
と[String:AnyObject]
は、同じように動作します。つまり、設定されていないキーにアクセスし、キーをnil
に設定すると、同じキーが辞書から削除されます。 。なぜ彼らは同じタイプと見なされないのですか?[String:AnyObject?]および[String:AnyObject]は、高速コンパイラと同じ型ではないのはなぜですか?
EDIT:答えからのコンパイラの視点との違いを理解しています。私が遊び場に次のコードを置くことにしました:
var optional = [String:AnyObject?]()
var regular = [String:AnyObject]()
//Some control keys
optional["controlkey"] = "valueoptional"
regular["controlkey"] = "valueRegular"
//Set the keys
optional["keyOptional"] = "valueoptional"
regular["keyRegular"] = "valueRegular"
//Unset the keys
optional["keyOptional"] = nil
regular["keyRegular"] = nil
for (key,val) in optional {
print("key: \(key)\tval: \(val)")
}
for (key,val) in regular {
print("key: \(key)\tval: \(val)")
}
驚いたことに、オプションががnilに設定したキーを印刷しませんでした。 出力は以下の通りであった:
key: controlkey val: Optional(valueoptional) //The keys for the optional dictionary
key: controlkey val: valueRegular //The keys for the `regular` dictionary
なぜ私が現れnilに設定されていない重要なのですか?
私はもう少しお尋ねしました! – Quantaliinuxite