Я только начал внедрять некоторые из наших новых функций в Swift, а не в Objective-c, пока все в порядке, но меня смущает то, как правильно использовать блоки Obj-C в Swift.
В моем классе Obj-C я определил блок, который будет использоваться для обработки ответов HTTP на вызовы нашего API:
typedef void(^CCAPIClientRequestCompletionBlock)(id response, NSArray *messages, NSDictionary *metaData, NSError *error);
Это используется в следующем методе:
-(void)createMeetingWithUsers:(NSArray *)users subject:(NSString *)subject andDescription:(NSString *)description withCompletionBlock:(CCAPIClientRequestCompletionBlock)completionBlock;
Сейчас я пишу клиент API для доступа к новой области нашего API в Swift и пытаюсь повторно использовать блок в качестве закрытия. Код ниже собирается и запускается:
apiClient.createMeeting(withUsers: userIds, subject: subject, andDescription: description) { (response, messages, metaData, error) -> Void in
}
но я хотел бы иметь возможность сохранять типы параметров и думал, что смогу сделать что-то вроде:
apiClient.createMeeting(withUsers: userIds, subject: subject, andDescription: description) { (response:Any?, messages:[Any], metaData:[AnyHashable:Any], error:NSError) -> Void in
}
Но когда я пытаюсь это сделать, я получаю сообщение об ошибке:
Cannot convert value of type '(Any?, [Any], [AnyHashable : Any], NSError) -> Void' to expected argument type 'CCAPIClientRequestCompletionBlock!'
Что мне здесь не хватает?
it still errors
? Это все та же ошибка? 28.02.2017Cannot convert value of type '(Any?, [Any], [AnyHashable : Any], NSError) -> Void' to expected argument type 'CCAPIClientRequestCompletionBlock!'
независимо. 28.02.2017