需要帮助在 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