Bu sınıfı nasıl hızlıca 2 yazabilirim? NSMethodSignature & NSInvocationNSMethodSignature & NSInvocation eşdeğeri eşdeğeri 2
1
A
cevap
1
NSInvocation
Swift mevcut değildir peşin
@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"];
}
}
Teşekkür'ın hızlı 2'de artık yok. Ancak, bu durumda, NSInvocation
aslında gerekli değildir. Her zaman iki parametreli nesne-işaretçi tipi ile bir yöntemi çağıracağınız argümanlarını belirlediğinizden biliyoruz. (Dizin 2 için self
yerine &self
kastettiğinizi varsayarsak) Bunu performSelector:withObject:withObject:
ile yapabilirsiniz.
[delegate performSelector:sel withObject:self withObject:request]
Bu Swift 2'de mevcuttur:
delegate?.performSelector(sel, withObject:self, withObject:request)
P.S. Bu gerçekten garip çünkü görünüşe göre bir tamamlama işleyicisi alır, bu Swift için mükemmel olur, çünkü gövdenin eksik görünmesi ve tamamlanma işleyicisinin türü doğru olmadığı için doğru değildir. istek al.
İlgili konular
- 1. CountDownLatch eşdeğeri
- 2. Açısal 1 eşdeğeri Aksi durumda 2
- 3. Java'nın eşdeğeri [self performSelector: foo afterDelay: 2]
- 4. Survfit eşdeğeri?
- 5. PyQt_PyObject eşdeğeri?
- 6. os.path eşdeğeri?
- 7. phpMyAdmin eşdeğeri?
- 8. PowerShell eşdeğeri?
- 9. makedepend eşdeğeri?
- 10. Haskell eşdeğeri?
- 11. CultureInfo.GetCultureInfo eşdeğeri?
- 12. MonoTouch.Dialog eşdeğeri?
- 13. IsFinite() eşdeğeri
- 14. SQLITE eşdeğeri?
- 15. StyleCop eşdeğeri?
- 16. GetWebResourceUrl eşdeğeri?
- 17. FileOutputStream eşdeğeri
- 18. selenium.wait_for_condition eşdeğeri
- 19. Javascript + = eşdeğeri?
- 20. `tee` komut eşdeğeri?
- 21. Javascript toFixed eşdeğeri java
- 22. VB.NET'teki Array() eşdeğeri? VB6
- 23. Android 1.6 eşdeğeri EXTRA_GATEWAY_URI
- 24. Ucu/Yanıt Eşdeğeri.
- 25. Yang: negatif lookahead eşdeğeri?
- 26. NSInvocation nil argümanı
- 27. Halide - döngü eşdeğeri
- 28. C++/CLI'de güvenli döküm - C# ile "eşdeğeri" eşdeğeri?
- 29. Haskell eşdeğeri Boost.Fusion
- 30. Excel VBA'da "! =" Eşdeğeri nedir?
NSInvocation'ı neden ilk etapta kullandığınızdan emin değilim. Neden bir ptr'yi isteğin ptr'sine temsilci için iletiyorsunuz? İstek zaten değiştirilebilir. Swift'de muhtemelen 'didFinishSelector' yerine 'didFinishBlock' kullanırsınız. – hnh
Bunu yapmadım, sadece buldum ve swift2'ye dönüştürmek istiyorum ama 2 sınıf artık yok –
Bu arada, bu Objective-C kodu yanlış. Satır [invocation setArgument: (__ köprüsü void *) (self) atIndex: 2]; 'yanlıştır. '- [NSInvocation setArgument: atIndex:]' argüman olarak ayarlanacak şeyin işaretçisini alır. Nesneyi gösteren bir işaret olan 'self'i geçiyorsunuz ve bir nesne doğrudan manipüle edilemiyor. Eğer 'self'i argüman olarak ayarlamak istiyorsanız, bunun yerine '& self'i geçmelisiniz. – newacct