ios - 如何在 Swift 中读取 Plist?

标签 ios swift

我想读取一个 NSArray 表单 plist 和代码:

func loadPlistArray() -> [Any] {

    var path: String? = Bundle.main.path(forResource:"MyCenter", ofType: "plist")

    if let arry = NSArray(contentsOfFile: path!) {
        return arry as! NSArray
    }else{
        return nil;
    }

}

但总是出现以下错误:

enter image description here 在我从 plist 中获取数据后,我发现我看不到 Dictionary 的详细信息:

enter image description here

这是我的 plist: enter image description here

我应该通过 var plistArray : [[String:Any]] 在数组中添加一个泛型吗?

最佳答案

您收到的错误消息告诉您您的方法有什么问题,这就是我编写函数的方式:

func loadPlistArray() -> [Any] { // 1
    guard
        let url = Bundle.main.url(forResource: "MyCenter", withExtension: "plist"), // 2
        let list = NSArray(contentsOf: url) as? [Any] // 3
        else { return [] } // 4

    return list
}

还有一些评论:

  1. 您正在声明方法以返回 Any 项的 Array,但您的方法试图返回 NSArray
  2. 建议使用基于 URL 的方法访问文件,而不是基于字符串的路径。
  3. 您必须使用 Array 方法来读取 plist,但您可以将其转换为 [Any]。但是,如果您知道 plist 中的项目类型,我建议您从此方法返回一个正确类型的数组,例如[String], [Int]
  4. 如果无法读取文件,则无需返回可选值。根据您要如何处理错误,您可以返回一个空数组(如我在此处所示)或将您的函数转换为抛出函数,这样如果您无法读取文件,则会抛出错误并可以处理通过调用代码。

关于ios - 如何在 Swift 中读取 Plist?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45877406/

相关文章:

ios - 首次加载时 UICollectionViewCell 内容大小错误

iphone - 什么时候清除iPhone应用程序缓存?

ios - MDCTextField rightView 属性在 iOS 13 上损坏

Swift 执行一个简单的测试并将结果传递给函数的参数

arrays - for 循环中 addChild 的时间延迟导致错误! swift

ios - 如何将日期传回父类并更改标签?

iphone - NSURL 到 NSString

ios - 使用Autolayout时在layoutSubviews中添加subview是否正确

ios - Swift 应用内购买 : Constant prompt to sign in; incorrectly handling . finishTransaction?

ios - swift 3 : Error in TableView when deleting cells holding UserDefault values