/ / Swift: użyj zamknięcia zgodnego z blokiem Celu-C - ios, cel-c, szybki

Swift: Użyj zamknięcia kompatybilnego z blokiem Objective-C - ios, target-c, swift

Próbowałem zdefiniować zamknięcie za pomocą następujących bloków Objective-C:

typedef void(^UPBaseEventAPIArrayCompletion)(NSArray *results, UPURLResponse *response, NSError *error);

+ (void)getFriendsWithCompletion:(UPBaseEventAPIArrayCompletion)completion;

w tym:

UPUserAPI.getFriendsWithCompletion({(friends: [AnyObject], response: UPURLResponse, error: NSErrorPointer) -> Void in

})

... i otrzymał następujący błąd (patrz obrazek):

Nie można przekonwertować wartości typu „([AnyObject], UPURLResponse, NSErrorPointer) -> Void” na oczekiwany typ argumentu „UPBaseEventAPIArrayCompletion!”

wprowadź opis obrazu tutaj

Jaki jest właściwy sposób, aby to zrobić?

Odpowiedzi:

2 dla odpowiedzi № 1

Spróbuj tego.

UPUserAPI.getFriendsWithCompletion({(friends: [AnyObject]?, response: UPURLResponse?, error: NSError?) -> Void in
//code
})

W kodzie celu C każdy z tych parametrów może być zerowy. Tak więc w Swift te parametry muszą być zdefiniowane jako Opcjonalne.