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, за исключением того, что тело кажется неполным, а тип обработчика завершения неверен, поскольку он не ' принять запрос.

Другие вопросы по тегам