Как я могу записать этот класс в swift 2? NSMethodSignature & NSInvocation больше не существует в быстром 2NSMethodSignature & 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"];
}
}
Спасибо заранее-х
Я не совсем уверен, почему вы используете NSInvocation в первую очередь. Почему вы передаете ptr запросу ptr делегату? Запрос уже изменен. В Swift вы, вероятно, используете «didFinishBlock» вместо «didFinishSelector». – hnh
Я этого не делал, я просто нашел его, и я хочу его преобразовать в swift2, но 2 класса больше не существуют –
Кстати, этот код Objective-C неверен. Строка '[invocation setArgument: (__ bridge void *) (self) atIndex: 2];' неверна. '- [NSInvocation setArgument: atIndex:]' принимает указатель на предмет, заданный как аргумент. Вы передаете 'self', который является указателем на объект, и объект нельзя манипулировать напрямую. Если вы хотите установить 'self' в качестве аргумента, вы должны передать' & self' вместо этого. – newacct