Swift Userdefaults 将 String 转换为 __NSCFString
Posted
技术标签:
【中文标题】Swift Userdefaults 将 String 转换为 __NSCFString【英文标题】:Swift Userdefaults converting String to __NSCFString 【发布时间】:2020-09-19 06:17:15 【问题描述】:我的代码可以在UserDefaults
中保存[String: Any]
的字典。检索时,String
更改为 __NSCFString
。我正在使用Mixpanel
来跟踪事件并将此字典作为事件属性发送。现在的问题是 __NSCFString
不是有效的 MixpanelType
所以 Mixpanel 正在丢弃我的字典。
问题:
有没有办法获取在 UserDefaults 中使用字典保存的相同数据类型? Mixpanel 有没有办法接受转换后的数据类型?这是我正在使用的代码
var mixpanelProperties: [String: Any]
get defaults.dictionary(forKey: "\(#function)") ?? [:]
set defaults.set(newValue, forKey: "\(#function)")
mixpanelProperties = ["a-key": "value for the key"]
let prop = mixpanelProperties
print("Type of: \(String(describing: prop["a-key"]))")
阿斯达德
【问题讨论】:
当您从 UserDefaults 读取字典时,您是否尝试将字典转换为 [String: Any]? 我认为这里不需要强制转换,因为UserDefaults.dictionary
返回 [String: Any]?
那我理解错了,那么__NSCGString是从哪里来的呢?也许你应该添加一些代码来澄清你的问题。
@JoakimDanielson 我已经编辑了我的问题。请看一看。
目前还不清楚 __NSCGString 来自哪里,我试图在操场上重现但无法做到。
【参考方案1】:
MacOS 和 ios 使用各种不同的类来表示字符串,它们都是兼容的。 x 作为?无论 x 的具体类是什么,字符串都应该可以工作。除非你使用的代码明确地检查你不应该做的类。
【讨论】:
以上是关于Swift Userdefaults 将 String 转换为 __NSCFString的主要内容,如果未能解决你的问题,请参考以下文章
如何将完整的 UserDefaults 列表放入 tableview - Swift 3
Swift 5 将 AVAsset 保存到 UserDefaults
如何使用静态自我实例将模型类保存在 UserDefaults 中?