NSMethodSignature & NSInvocation эквивалент в Swift 2
Как я могу написать этот класс в Swift 2? NSMethodSignature & NSInvocation больше не существует в Swift 2
@implementation MyAuth
- (void)authorizeRequest:(NSMutableURLRequest *)request
delegate:(id)delegate
didFinishSelector:(SEL)sel {
if (request) {
NSString *value = [NSString stringWithFormat:@"%s %@", GTM_OAUTH2_BEARER, self.accessToken];
[request setValue:value forHTTPHeaderField:@"Authorization"];
}
NSMethodSignature *sig = [delegate methodSignatureForSelector:sel];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig];
[invocation setSelector:sel];
[invocation setTarget:delegate];
[invocation setArgument:(__bridge void *)(self) atIndex:2];
[invocation setArgument:&request atIndex:3];
[invocation invoke];
}
- (void)authorizeRequest:(NSMutableURLRequest *)request
completionHandler:(void (^)(NSError *error))handler {
if (request) {
NSString *value = [NSString stringWithFormat:@"%@ %@", @"Bearer", self.accessToken];
[request setValue:value forHTTPHeaderField:@"Authorization"];
}
}
Заранее спасибо
1 ответ
NSInvocation
недоступно в Swift. Но в этом случае NSInvocation
на самом деле не нужно. Из того, как вы устанавливаете аргументы, мы знаем, что вы всегда будете вызывать метод с двумя параметрами объект-указатель типа. (Предполагая, что вы имели в виду &self
вместо self
для индекса 2.) Вы можете сделать это с performSelector:withObject:withObject:
,
[delegate performSelector:sel withObject:self withObject:request]
Это доступно в Swift 2:
delegate?.performSelector(sel, withObject:self, withObject:request)
PS Это действительно странно, потому что кажется, что у вас есть другая версия метода, которая принимает обработчик завершения, который был бы идеален для Swift, за исключением того, что тело кажется неполным, а тип обработчика завершения неверен, поскольку он не ' принять запрос.