以下(有点人为的)代码在以下情况下有效:快速优化级别被设定为无 [-Onone](默认用于调试):
let nsa = NSArray(array: ["foo", "bar"])
let a = nsa as [String]
但应用程序崩溃了(崩溃日志 http://pastebin.com/fdn20buk)在运行时设置为最快[-O](默认发布)。
我幸运地发现我可以通过这样做来解决这个问题:
let a = nsa as [AnyObject] as [String]
我的问题有两个:
- 你能帮我理解为什么会发生这种情况吗?
- 有没有更好的方法将 NSArray 转换为 Array?
UPDATE
这似乎确实是一个错误。我还没有向苹果报告此事。如果其他人愿意花时间这样做,请这样做!
Xcode 上似乎已修复Version 6.3.1 (6D1002)
.
而且,这不是您最初问题的答案,而是随着新的 Swift 1.2 的引入,as
是强制转换,现在被更明确的取代as!
。您应该期待NSArray
to Array<T>
where T != AnyObject or NSObject
坠毁。
你最好使用条件转换as?
. Avoid !
任何时候都有可能。
let nsa = NSArray(array: ["foo", "bar"])
if let a = nsa as? [String] {
println("a \(a)")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)