私は奇妙な振る舞いに気づきました。 次のコードは、期待どおりに「見つからない」と表示します。少しスウィフト - 無制限にアクセスするとクラッシュしない
import Cocoa
var array : [AnyObject]?
array = [["one":"1"]]
for element in array! {
if let check = element["two"] {
print(check)
} else {
print("Not found")
}
}
にコードを変更
import Cocoa
var array = [["one":"1"]]
for element in array {
if let check = element["two"] {
print(check)
} else {
print("Not found")
}
}
は「ゼロ」を出力します - それは私がnilで印刷可能なオブジェクト「に設定していない」とではありません迅速に思ったように私が期待したものではありません。
紛失しているものがありますか? ありがとう!
配列が 'nil'である唯一の点は、オプションの型として宣言されていても初期化されていない点なので、なぜ' nil'になるのかはっきりしません。 'array'の値を直ちに設定します。これはアンラッピングまたは内容のチェックの前です。 2番目のケースでも「見つからない」と言われると思います。おそらく '[AnyObject?]と' [AnyObject]? 'の区別が明確でないかもしれません。 – mc01
要素 "" two "がnilになると" check "がnilになるはずですが、" print(check ) "実際には" nil "を出力します –
私は実際にコンパイラが最初に' AnyObject'を添字にすることに驚いています。私の意見では、そうすることは許されません。 – Hamish