2015-04-24 13 views
11

Używam AFNetworking w projekcie Swift.błąd zamknięcia Typalias w Swift

1 - Typealias zamknięcia:

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

2 - określenie funkcji:

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 - błąd:

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

dzięki za pomoc.

EIDT:

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

do

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

Co stanie się, gdy usuniesz nawias z '(successBlock)! '? – Clashsoft

+0

Może się tak zdarzyć, ponieważ AFNetworking jest biblioteką Objective-C, która nie lubi szybkiego typu "String" dla parametrów "path" i "parameters" do metody GET. Lepszym rozwiązaniem może być skorzystanie z szybkiej wersji AFNetworking o nazwie AlamoFire, aby nie napotkać tego rodzaju problemów. – dean

+0

@Clashsoft sam błąd. –

Odpowiedz

5

Myślę, że brakuje wam! w definicji niepowodzenia failureBall oczekuje oczekiwanego jawnie rozpakowanego opcjonalnego AFHTTPRequestOperation, a nie standardowego AFHTTPRequestOperation, które są faktycznie różnymi typami. Wydaje mi się, że powinno być,

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

również niejawnie rozpakować parametry wejściowe metody wydaje mi się trochę czerwona flaga, albo przekazać w opcjach i użyć, jeśli pozwala, aby je odwijać i wywoływać GET, jeśli są tam i obsługiwać sprawy, gdy nie są lub nie są opcjonalne. –

1

Spróbuj tego:

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!) 
} 

(Zauważ, że "zwrot" dwa na powodzenie i niepowodzenie argumenty

!.

Jest to oparte na założeniu, że funkcja GET oczekuje zamknięcia, a nie fakultatywne odwoływanie się do zamknięcia. To może być to. W przeciwnym razie użyj klawisza, aby uzyskać zakończenie metody self.GET i zobaczyć typ, którego Swift spodziewa się. Powie Ci, gdzie jest problem.

Powiązane problemy