2015-09-22 11 views
6

Questa riga ha sempre funzionato bene per me per creare richieste Alamofire e ottenere la risposta JSON.Alamofire + SwiftyJSON Errore di compilazione dopo la conversione in Xcode 7

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

    // .... 

} 

Dopo l'aggiornamento a XCode 7 e convertendo il progetto per Swift 2.0, tutte le righe di codice che hanno la mia richiesta Alamofire non mostrano questo errore:

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

Sono confuso, ma il documento Alamofire dice che è come dovrebbe essere chiamato. Anche quando l'ho portato a 2 parametri, continua lo stesso errore, tranne che mostra (_, _) invece di (_, _, _, _) – Lavvo

+0

Aggiunta una risposta qui sotto, ha dovuto aprire un progetto AF in Xcode7 a vedi, spero che funzioni! –

risposta

14

Trovato la risposta in questa link ma è in giapponese. Sembra che questo è quello corretto da ora (preso dalla risposta in 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

Sto provando questo adesso. Finora, questo sta rimuovendo i miei errori di compilazione. Ho bisogno di farlo un paio di volte in varie aree prima di poter costruire la mia app per testare, quindi ti farò sapere i risultati. – Lavvo

+0

Mi hai salvato, questa sembra essere la risposta corretta. In breve, questo ora funziona per me. Ancora un bel po 'di modifiche che devo fare sulla base di questo nuovo modulo, ma posso vedere le mie dichiarazioni di registro tirare i risultati. – Lavvo

+0

Sembra che se si installa Alamofire usando Cocoapods, questo problema non si verifica. –

0

ho tirato su un progetto con AF e qui si va:

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


    } 

sembra che sia appena 3 parametri per la chiusura, richiesta, risposta & l'oggetto risultato. Immagino che questo sia perché questo dovrebbe essere qualcosa che getta in Swift 2.0.

0

Uso Alamofire-SwiftyJSON la gestione degli errori è la stessa:

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

ma ora error è una ErrorType invece di un NSError.

Utilizzando pianura Alamofire e iOS JSON, la risposta e l'errore sono unificate in un risultato di tipo Result<AnyObject>, si deve scartare il risultato:

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

vecchia sintassi:

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

Nuova sintassi :

Alamofire.request(req).responseJSON() { 
    response in 
    if response.result.isSuccess { 
    let data = response.result.value 
    // .... 
    } 
}