Подтвердить что ты не робот

Как получить значение результата Alamofire.request(). ResponseJSON в swift 2?

У меня вопрос о новой версии Alamofire для Swift 2

Alamofire.request(.POST, urlString, parameters: parameters as? [String : AnyObject])
        .responseJSON { (request, response, result) -> Void in
            let dico = result as? NSDictionary
            for (index, value) in dico! {
                print("index : \(index)     value : \(value)")
            }
    }

В этом разделе я хотел бы привести результат в NSDictionary. Но когда я компилирую и устанавливаю точку останова, отладчик говорит, что dico - нуль. Если я использую debugDescription для результата печати, это не ноль и содержит то, что я ожидал Как я могу задать переменную Result?

4b9b3361

Ответ 1

Принятый ответ отлично работает, но с введением Alamofire 3.0.0 есть некоторые нарушения, которые влияют на эту реализацию.
руководство по миграции содержит дополнительные пояснения, но я расскажу о тех, которые связаны с фактическим решением.

  • Response
    Все сериализаторы ответов (за исключением ответа) возвращают общую структуру Response.

  • Тип ответа
    Тип результата был изменен как двойной общий тип, который не хранит NSData? в случае .Failure.

Также учтите, что Alamofire рассматривает любой завершенный запрос, чтобы быть успешным, независимо от содержания ответа. Поэтому вам нужно связать .validate() до .responseJSON(), чтобы попасть в случай .Failure. Подробнее об этом .

Обновленный код:

let url = "http://api.myawesomeapp.com"
Alamofire.request(.GET, url).validate().responseJSON { response in
    switch response.result {
    case .Success(let data):
        let json = JSON(data)
        let name = json["name"].stringValue
        print(name)
    case .Failure(let error):
        print("Request failed with error: \(error)")
    }
}

Для справки:

  • Xcode 7.3 (Swift 2.2)
  • Alamofire 3.3.1
  • SwiftyJSON 2.3.3

Ответ 2

Если вы не против использовать SwiftyJSON библиотеку, здесь приведен пример работы в Xcode 7 Beta 5 + Alamofire 2.0.0-beta.1 + SwiftyJSON (ветвь xcode7)

Alamofire.request(.GET, url, parameters: params, encoding: ParameterEncoding.URL).responseJSON { (_, _, result) in
    switch result {
        case .Success(let data):
            let json = JSON(data)
            let name = json["name"].string
        case .Failure(_, let error):
            print("Request failed with error: \(error)")
    }
}

Edit:

Обновлено SwiftyJSON git страница