使用 Swift,从 plist 加载数据时,如何区分布尔值和整数值?

Posted

技术标签:

【中文标题】使用 Swift,从 plist 加载数据时,如何区分布尔值和整数值?【英文标题】:Using Swift, how can I tell the difference between a boolean and integer value when loading data from a plist? 【发布时间】:2015-09-30 13:33:58 【问题描述】:

我的应用需要能够读取 plist 文件并知道数据的类型,所以我创建了一个函数来确定对象的类型:

func getTypeOfObject(object: AnyObject) -> String 
    if object as? [String:AnyObject] != nil 
        return "dict"
     else if object as? [AnyObject] != nil 
        return "array"
     else if object as? Bool != nil 
        return "bool"
     else if object as? Int != nil 
        return "int"
     else if object as? String != nil 
        return "string"
     else 
        return ""
    

问题是,如果我在一个数字上调用该函数,我会返回“bool”。 如果我更改函数以首先检查数字,则在传递布尔值时会返回“int”。

这似乎是因为当我从 plist 文件中的数据创建一个 dict 时,布尔值被赋予一个整数值(1 代表真,0 代表假)。

有什么办法可以解决这个问题吗?

【问题讨论】:

【参考方案1】:

你不能——除非你想自己解析 plist XML。返回的值将是 NSNumber,由您决定是否要将其视为布尔值(通过 NSNumber 的 boolValue)。

【讨论】:

您知道我可以使用的解析 plist XML 的任何框架/库吗? 谢谢!我会看看它,看看它是否适合我。 我似乎无法弄清楚如何使用 SWXMLHash 或 AEXML 来解析 plist 文件并生成 Swift 字典。有什么建议吗?【参考方案2】:

我做了更多研究并决定使用CFPropertyList,这解决了我的问题,因为布尔值是CFBooleanRefs,而不是NSNumbers。

如果有人想要实际代码,请在 cmets 中询问。现在有点乱,所以我不马上发布。

【讨论】:

以上是关于使用 Swift,从 plist 加载数据时,如何区分布尔值和整数值?的主要内容,如果未能解决你的问题,请参考以下文章

swift 将数据从.plist加载到数组

如何在 swift 中读取数组和字典的 plist

将 plist 加载到核心数据中

从 swift 2 中的 plist 读取时无法创建 NSDictionary

Xcode 11 Swift 5 - 无法安装应用程序(无法加载 info.plist 文件)

如何将自定义数组保存/重新加载到 plist