5

次のコードは Swift 3 でクラッシュします。誰か理由を説明してもらえますか?

struct S {
    let a:Int
}

let t = [S(a: 8)]
let u:AnyObject = t as NSObject
let v:[S] = u as! [S]

それは、Swift 3 の構造体の配列が NSObject であり (Swift 2 にはありません)、どういうわけか NSArray にうまく変換できないためですか? そして、なぜそれは NSObject なのですか?..

4

1 に答える 1

2

可能な解決策は、オプションのダウンキャストで条件付きバインディングを使用することです。

if let v = u as? [S] { /* */ }

ただし、強制ダウンキャストが機能しない理由はわかりません。で何かファンキーなことが起こっているかもしれませんNSObject

于 2016-10-19T15:32:57.550 に答える