Следующая функция, в которой я повторяю элементы в plist, отлично работает в Swift 1, возможно Swift 2, но определенно не Swift 3. Сделав попытку переопределить NSDictionary как словарь вместо этого, он запрашивает типы, которые будут храниться в словаре, но при попытке использовать различные варианты, такие как строка или даже любое, оно не компилируется , Поэтому я переключился обратно держать его как NSDictionary, но эта ошибка меня в тупик:Тип 'NSDictionary.Iterator.Element' (aka '(key: Any, value: Any)') не имеет подстрочных индексов
Type 'NSDictionary.Iterator.Element' (aka '(key: Any, value: Any)') has no subscript members
Эта ошибка появляется при установке константы: точка, название, typeRawValue и субтитров.
func addAttractionPins() {
var myDict: NSDictionary?
if let filePath = Bundle.main.path(forResource: "GeorgiaHumanAnnotations", ofType: "plist"){
myDict = NSDictionary(contentsOfFile: filePath)
}
if let dict = myDict {
for attraction in dict {
let point = CGPointFromString(attraction["location"] as! String)
let coordinate = CLLocationCoordinate2DMake(CLLocationDegrees(point.x), CLLocationDegrees(point.y))
let title = attraction["name"] as! String
let typeRawValue = Int((attraction["type"] as! String))!
let type = HumanAnnotationType(rawValue: typeRawValue)!
let subtitle = attraction["subtitle"] as! String
let annotation = HumanAnnotation(coordinate: coordinate, title: title, subtitle: subtitle, type: type)
mapView.addAnnotation(annotation)
}
}
}
Вот скриншот PLIST: Если вам нужен дополнительный код, чтобы понять, что происходит, пожалуйста, не стесняйтесь обращаться к нам и спасибо за помощь чьей заранее.
Почему вы используете ' NSDictionary'? Используйте словарь Swift. – rmaddy
@rmaddy Я действительно рассматривал его, и, как вы знаете, он запрашивает типы, которые войдут в словарь, который будет объявлен, но когда я попробовал типы строк или даже любые типы, это дало мне дополнительные ошибки. –
Вы уверены, что корневой объект plist - это словарь? Вы используете перечислитель массива. – vadian