2015-08-02 5 views
2

Я создаю приложение API REST в Swift 2 с iOS 9, используя поддержку SwiftyJSON для Swift 2 (https://github.com/andrelind/SwiftyJSON). Когда я получаю мои данные и распечатать его, я использую этот код:Swift 2 + SwiftyJSON: использование ошибки неразрешенного идентификатора

RestApiManager.sharedInstance.getRandomUser { json in 
    let results = json["results"] 
    for (index: String, subJson: JSON) in results{ 
     var user = subJson["user"].string 
     print(user) 
    } 
} 

С помощью этого кода я получаю эту ошибку:

var user = subJson["user"].string 

Use of unresolved identifier 'subJson error'

И Согласно с Swift 2 документации, цикл со словарем, как:

for (key, value) in source{ 
    //Do something 
} 

И SwiftyJSON документации я могу использовать его таким образом:

for (key: String, subJson: JSON) in json { 
    //Do something you want 
} 

Кто-нибудь знает, почему я получаю эту ошибку, если теоретически утверждение верно. Я использую Xcode 7.0 beta 3, Swift 2 и мой проект, если для iOS 9. Спасибо!

+0

Согласно с SwiftyJSON документации: // Получение строки используя путь к элементу let path = [1, "list", 2, "name"] let name = json [путь] .string –

ответ

4

Вы вводите в заблуждение внутреннее имя параметра и фактический параметр, который дает вам итерация. Следующие должны работать:

// demo JSON 
let json = ["results" : ["first" : ["user" : 123], "second" : ["user" : 456], "third" : ["user" : 789]]] 

let results = json["results"]! 
for (index: String, subJson: JSON) in results { 
    var user = JSON["user"] 
    print(user) 
} 

Чтобы сделать его немного более ясно:

for (index: myIndex, subJson: mySubJSON) in results { 
    var user = mySubJSON["user"] 
    print(user) 
} 

subJSON не имя переменной, содержащей ваш JSON, имя JSON/mySubJSON, то же самое для индекса.

+0

Спасибо за ваше объяснение. Оно работает! –

+0

Большое спасибо. –

0

Попробуйте с этим:

RestApiManager.sharedInstance.getRandomUser { (json) -> Void in 
      let results = json["result"] 
      for result in results { 
       let user = result.1["user"].object 
       print(user) 
      } 
     } 

Ваш results возвратит (key, value), поэтому, когда вы код result.1["user"], вы будете получать value из result

Смежные вопросы