繁体   English   中英

将Strutts的Swift结构数组转换为NSArray时反之亦然的问题

[英]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结构上具有一个将其呈现为可以存储的内容的方法(例如,字符串数组,该数组可以转换为NSStringNSArray )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM