1
このクラスを迅速な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では、おそらく 'didFinishSelector'の代わりに 'didFinishBlock'を使用します。 – hnh
私はこれをしなかった、私はそれを見つけた、私はswift2でそれを変換したいが、2つのクラスはもはや存在しない –
ところで、このObjective-Cコードは間違っている。 '[invocation setArgument:(__ bridge void *)(self)atIndex:2];'という行は間違っています。 ' - [NSInvocation setArgument:atIndex:]'は引数として設定するものへのポインタをとります。あなたはオブジェクトへのポインタである 'self'を渡しており、オブジェクトは直接操作できません。引数として 'self'を設定したい場合は、代わりに'&self'を渡す必要があります。 – newacct