使用swift中的plist类型获取值

时间:2018-04-21 16:44:16

标签: swift plist

我已经看到很多关于如何从swift中获取plist值的示例 - 但是所有这些都涉及在从plist读取变量之后对类型进行类型转换。既然我们已经在plist中创建了一个类型的属性,为什么我们必须再次输入它?有没有办法从plist中读取它们在plist中的类型?

例如,这是我用来从plist中读取值的方法:

extension Bundle {
  var someVar: String {
    return object(forInfoDictionaryKey: "someVar") as? String ?? ""
  }
}

当我在plist中将它作为String键入时,为什么我需要再次将变量强制转换为String?

2 个答案:

答案 0 :(得分:1)

因为你的plist是[String: Any]字典。它可以保存不是String的值,并且编译器无法知道什么是什么,直到你明确告诉它 - 通过你正在进行的转换。

答案 1 :(得分:1)

请在object(forInfoDictionaryKey⌥-点击。你会看到

enter image description here

由于属性列表可以包含许多不同的类型(数组,字典,字符串,url,数值,日期,数据),因此返回值是可选的Any,您必须转换类型。

Apple在URL中提供了另一种方法:如果您从resourceValues(forKeys获得URLResourceKey的值,那么您也会得到预期的类型。

随意编写Bundle的扩展名,其中也考虑实际类型。