gpt4 book ai didi

swift - 将 defaults.objectForKey 转换为 Array<(String,Double)>

转载 作者:搜寻专家 更新时间:2023-11-01 06:46:43 25 4
gpt4 key购买 nike

我试图将 NSUserdefault 中的对象转换为带有元组的数组,但它不符合协议(protocol)

// works
var records: String
records = defaults.objectForKey("friend_records") as String ?? ""

// works with warning
var records: Array<String>?
records = defaults.objectForKey("friend_records") as Array<String> ?? []

// does not conform to protocol
var records: Array<(String, Double)>?
records = defaults.objectForKey("friend_records") as Array<(String, Double)> ?? []

解释和解决方法是什么?

最佳答案

您不能在 NSUserDefaults 中存储元组数组。 NSUserDefaults 只能存储属性列表数据,即 NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary。 [(String, Double)] 无法转换为 NSArray,因此无法存储在 NSUserDefaults 中。

有几种方法可以解决这个问题。

如果顺序无关紧要并且字符串是唯一的,那么您可以将其转换为 [String:Double] 字典。

您可以将字符串和 double 拆分成两个数组并分别存储它们(请参阅 zip 命令以了解将它们重新组合在一起的简单方法;不幸的是 Swift 没有 解压等价物)。

您可以将它们转换为 JSON 并存储一个 [String]

您可以制作一些其他简单的数据格式,如“mystring:123.45”,并将其存储为 [String]

您可以将这些元组移动到一个简单的数据对象中。无论如何,元组的大多数用途最好作为数据对象实现(元组非常容易出错)。然后,您可以在数据对象上实现 NSCoding,并将其序列化为 NSData。这是在 NSUserDefaults 中存储非属性列表内容的通用方法。

关于swift - 将 defaults.objectForKey 转换为 Array<(String,Double)>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com