2015-09-22 2 views
6

Эта строка всегда работала отлично для меня для создания запросов Alamofire и получения ответа JSON.Alamofire + SwiftyJSON Ошибка компиляции после преобразования в Xcode 7

Alamofire.request(req).responseJSON() { 
     (request, response, data, error) in 

    // .... 

} 

После обновления до XCode 7 и превращения проекта в Swift 2.0, все строки кода, которые мой запрос Alamofire не показывает эту ошибку:

'(_, _, _, _) -> Void' is not convertible to 'Response<AnyObject, NSError> -> Void' 
+0

Я смущен, но в документе Alamofire говорится, что так его следует называть. Даже когда я взял его до 2 параметров, по-прежнему остается та же ошибка, кроме того, что она показывает (_, _) вместо (_, _, _, _) – Lavvo

+0

Добавил ответ ниже, должен был открыть проект AF в Xcode7 до смотрите, надеюсь, что это сработает! –

ответ

14

нашел ответ в этом link но это на японском языке. Кажется, что это правильное теперь (из ответа в ссылке):

Alamofire.request(.GET, requestUrl).responseJSON { 
    response in 
    if response.result.isSuccess { 
     let jsonDic = response.result.value as! NSDictionary 
     let responseData = jsonDic["responseData"] as! NSDictionary 
     self.newsDataArray = responseData["results"] as! NSArray 
     self.table.reloadData() 
    }    
} 
+0

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

+0

Ты спас меня, кажется, это правильный ответ. Короче говоря, теперь это работает для меня. Все еще несколько настроек, которые мне нужно сделать на основе этой новой формы, но я могу видеть, как мои записи в журнале вытягивают результаты. – Lavvo

+0

Кажется, что если вы устанавливаете Alamofire используя Cocoapods, эта проблема не возникает. –

0

Я подъехал проект с ФП и здесь вы идете:

Alamofire.request(.POST, someRequest).responseJSON { (request, response, result) -> Void in 


    } 

Похоже, это только 3 параметров для закрытие, запрос, ответ & результат объекта. Я думаю, это потому, что это должно быть что-то, что бросает в Swift 2.0.

0

Alamofire-SwiftyJSON Использования обработки ошибок тот же:

.responseSwiftyJSON({ (request, response, json, error) -> Void in 
    if let error = error { 
     print("Received error \(error)") 
     return 
    } 
    else { 
     print("Received json response \(json)") 
    } 
} 

но теперь error является ErrorType вместо NSError.

Используя обычный Alamofire и IOS JSON, ответ и ошибка унифицированы в результате типа Result<AnyObject>, вы должны разворачивать результат:

.responseJSON { request, response, result in 
    switch result { 
    case .Success(let value): 
     print("Received response \(value)") 
    case .Failure(_, let error): 
     print("Received error \(error)") 
    } 
2

Старый синтаксис:

Alamofire.request(req).responseJSON() { 
    (request, response, data, error) in 
    // .... 
} 

Новый синтаксис :

Alamofire.request(req).responseJSON() { 
    response in 
    if response.result.isSuccess { 
    let data = response.result.value 
    // .... 
    } 
} 
Смежные вопросы