需要帮助在 Swift 3 中声明用于 plist 信息检索的数组 [重复]

Posted

技术标签:

【中文标题】需要帮助在 Swift 3 中声明用于 plist 信息检索的数组 [重复]【英文标题】:Need help to declare array for plist info retrieval in Swift 3 [duplicate] 【发布时间】:2016-09-29 05:15:45 【问题描述】:

由于从 Swift 2 到 Swift 3 的转换刚刚发生的变化,我无法找出解决我在 Xcode 上的代码问题的方法。

 func addBuildingPins()
    let filePath = Bundle.main.path(forResource: "CurtinBuildingList", ofType: "plist")
    let buildings = NSMutableArray(contentsOfFile: (filePath)!) /*check plist file to see if it is a dictionary or array or else for loop cannot run*/
    for building in buildings!
        let point = CGPointFromString(building["coordinate"] as! String)
        let coordinate = CLLocationCoordinate2DMake(CLLocationDegrees(point.x), CLLocationDegrees(point.y))
        let title = building["title"] as! String
        let typeRawValue = Int(building["type"] as! String)!
        let type = BuildingType(rawValue: typeRawValue)
        let subtitle = building["subtitle"] as! String
        let annotation = BuildingAnnotation(coordinate: coordinate, title: title, subtitle: subtitle, type: type!)
        mapView.addAnnotation(annotation)
        print(building)
    

错误就在方括号之前(building[])。我不断收到的错误是

类型“NSFastEnumerationIterator.Element”(又名,Any)没有下标成员”。

有没有办法解决这个问题?

【问题讨论】:

等等,您是在 plist 中存储数组数组吗? 是的。我只是按照关于 Swift 导航功能的指南进行操作,因此我的 plist 包含一个数组数组。每个次要数组都包含特定位置的信息。 【参考方案1】:

在使用 for 循环之前将您的建筑物数组转换为 [[String: Any]]

if let array = buildings as? [[String: Any]] 
     for building in array 
          //Your code 
     

【讨论】:

以上是关于需要帮助在 Swift 3 中声明用于 plist 信息检索的数组 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中对 TableView 的 plist 数组进行排序

SWIFT 属性列表:从 TableView 到 DetailView plist

在 swift 3 操场上阅读 plist

Manifest.plist 文件 ipad swift 游乐场

Swift Plist 读取和初始化数组作为键的对象

Swift 3:无法将数据写入 plist 文件