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

Using Swift, how can I tell the difference between a boolean and integer value when loading data from a plist?

我的应用程序需要能够读取 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 文件中的数据创建字典时,布尔值被赋予一个整数值(1 表示真,0 表示假)。

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

你不能 - 除非你想自己解析 plist XML。返回的值将是 NSNumber,您可以决定是否将其视为 bool(通过 NSNumber 的 boolValue)。

我做了更多研究并决定使用 CFPropertyList,它解决了我的问题,因为布尔值是 CFBooleanRef,而不是 NSNumber

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