Swift – итерация массива словарей

Попытка найти название каждой книги:

var error: NSError? let path = NSBundle.mainBundle().pathForResource("books", ofType: "json") let jsonData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil) let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary let books = jsonDict["book"] var bookTitles:[String] //for bookDict:Dictionary in books { // println("title: \(bookDict["title"])") //} 

Когда я раскомментирую эти последние три строки, все ад прорывается в Xcode6 beta3 – весь текст становится белым, я получаю постоянные всплывающие окна «SourceKitService Terminated» и «Временные ограничения редактора», и я получаю эти полезные ошибки сборки:

 <unknown>:0: error: unable to execute command: Segmentation fault: 11 <unknown>:0: error: swift frontend command failed due to signal 

Я серьезно оскорбил компилятор здесь. Итак, каков правильный способ итерации по массиву словарей и найти свойство «title» каждого dict?

One Solution collect form web for “Swift – итерация массива словарей”

У вас проблемы, потому что Swift не может сделать вывод о том, что книги являются итерируемыми. Если вы знаете тип массива, вы должны явно указывать на этот тип. Если, например, массив должен быть массивом словарей, которые имеют строки как объекты и ключи, вы должны сделать следующее.

 if let books = jsonDict["book"] as? [[String:String]] { for bookDict in books { let title = bookDict["title"] println("title: \(title)") } } 

Также обратите внимание, что вам нужно удалить доступ к словарю под индексом из интерполяции строк, поскольку он содержит кавычки. Вам просто нужно сделать это на двух строках.

  • Возможно ли, чтобы fatalError в требуемом init? (Coder aDecoder: NSCoder), когда я не использую раскадровки?
  • Уведомления, полученные от MPMoviePlayerController после нажатия следующей / предыдущей кнопки. или Как отключить следующий / предыдущий в быстром
  • Xcode Forcing Swift Опционально Unwraps Twice (!!)
  • Отклонить все текущие просмотры
  • AVCaptureMovieFileOutput записывает аудио только для первого видео
  • Просмотр привязки модели в Swift
  • Как установить ширину и высоту изображения в Swift
  • Как сохранить файлы cookie в общих настройках в iOS?
  • Ошибка приложения при нажатии ссылки на UITextView
  • AWS Cognito: проблемы при входе в систему сразу после выхода из системы
  • swift как передать параметр типа UIViewController <XXXDelegate>
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.