2015-04-24 21 views
11

Sto utilizzando AFNetworking in un progetto Swift.errore di chiusura di typealias in swift

1 - Typealias la chiusura:

typealias successBlock = (AFHTTPRequestOperation! ,AnyObject!)-> Void 
typealias failureBlock = (AFHTTPRequestOperation, NSError!) -> Void 

2 - Definire la funzione:

func getUserInfo(success: (successBlock)!, failure: (failureBlock)!) { 
    let path = "https://api.wei.s.json" 
    let parameters = ["source":"key"] 
    self.GET(path, parameters: parameters, success: success, failure: failure) 
} 

3 - Errore:

Cannot invoke 'GET' with an argument list of type '(String,parameters: [String : String], success: (successBlock)!, failure: (failureBlock)!)'

Grazie per qualsiasi aiuto.

EIDT:

typealias failureBlock = (AFHTTPRequestOperation, NSError!) -> Void 

a

typealias failureBlock = (AFHTTPRequestOperation!, NSError!) -> Void 
+0

Cosa succede quando si rimuove la parentesi da '(successBlock)!'? – Clashsoft

+0

potrebbe essere che, poiché AFNetworking è una libreria Objective-C, non gli piace il tipo "String" rapido per i parametri "percorso" e "parametri" del metodo GET. Potrebbe essere meglio usare la versione rapida di AFNetworking chiamata AlamoFire in modo da non incorrere in questi tipi di problemi in futuro. – dean

+0

@Clashsoft stesso errore. –

risposta

5

Penso che manchi un! sulla definizione typealias failureBlock si aspetta un AFHTTPRequestOperation facoltativo non scartato non un AFHTTPRequestOperation standard che sono in realtà tipi diversi. Credo che dovrebbe essere,

typealias failureBlock = (AFHTTPRequestOperation!, NSError!) -> Void 
+0

anche scartare implicitamente i parametri di input del metodo mi sembra un po 'una bandiera rossa, o passare in optionals e usare un se è necessario per scartarli e chiamare GET se sono lì e gestire il caso quando non lo sono o renderli non opzionali. –

1

Prova che:

func getUserInfo(success: (successBlock)!, failure: (failureBlock)!) { 
    let path = "https://api.wei.s.json" 
    let parameters = ["source":"key"] 
    self.GET(path, parameters: parameters, success: success!, failure: failure!) 
} 

(Notare le due "bang" sul successo argomenti e il fallimento

!.

Questo si basa sul presupposto che la funzione GET si aspetta una chiusura e non un riferimento facoltativo a una chiusura. Potrebbe essere. Altrimenti, usa la sequenza di tasti per ottenere il completamento del metodo su self.GET e guarda il tipo che Swift si aspetta. Ti dirà dove c'è un problema.

Problemi correlati