使用 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
,这解决了我的问题,因为布尔值是CFBooleanRef
s,而不是NSNumber
s。
如果有人想要实际代码,请在 cmets 中询问。现在有点乱,所以我不马上发布。
【讨论】:
以上是关于使用 Swift,从 plist 加载数据时,如何区分布尔值和整数值?的主要内容,如果未能解决你的问题,请参考以下文章
从 swift 2 中的 plist 读取时无法创建 NSDictionary