[英]Problems with casting a Swift array of Structs to an NSArray and vice versa to use with NSUserDefaults
我遇到了将Structs的Swift数组桥接到NSArrays的问题。 我想在NSUserDefaults中存储结构的Swift数组。 NSUserDefaults将仅接受NSArray。 有人可以告诉我这是否是正确的方法:
首先,我在SwiftStruct中声明一个数组,并在程序中使用它:
var favorites = [SomeSwiftStruct]()
然后要存储它,我必须将其转换为NSArray。 使编译器不抱怨的唯一方法是按如下所示进行转换:
let tempArray = favorites as Any as NSArray
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(tempArray, forKey: "favorites")
然后检索它,我想尝试一下:
if let tempArray = defaults.objectForKey("favorites") as NSArray as Any as? [SomeSwiftStruct]{
favorits = tempArray}
不幸的是我还不能测试这是否有效。 现在我只知道没有编译器投诉
问题是,编译器抱怨的是您正在执行无法执行的操作。 您不能在NSArray
存储非Object-C对象(包括结构)。 通过Any
会增加足够的混淆,编译器会停止抱怨,但不能解决问题。
它编译的原因是你的第二个as
是迫使投,即斯威夫特将做到这一点,无论其是否有效。 但这很危险,因为它在运行时不起作用,因此您只会得到一个断言。 实际上,在当前的1.2版本的Swift中,这种as
已被重命名as!
表示这样很危险。
要将内容存储在NSUserDefaults
您需要在Swift结构上具有一个将其呈现为可以存储的内容的方法(例如,字符串数组,该数组可以转换为NSString
的NSArray
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.