2017-01-31 7 views
5

Zrobiłem to proste rozszerzenie w SWIFT:Jak zapobiec eksportowaniu rozszerzenia do nagłówka Swift dla Objective-C?

extension DispatchQueue { 
    func asyncAfter(delay: TimeInterval, block: @escaping()->()) { 
     DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC), execute: block) 
    } 
} 

W Project-Swift.h nagłówku raportowaniem błąd na tej linii:

@interface OS_dispatch_queue (SWIFT_EXTENSION(...)) 
- (void)asyncAfterDelay:(NSTimeInterval)delay block:(void (^ _Nonnull)(void))block; 
@end 

błędu jest: nie można odnaleźć deklarację interfejsu dla „OS_dispatch_queue '

Czy istnieje sposób, aby zapobiec eksportowaniu rozszerzenia dla Objective-C? Czy istnieje sposób, aby naprawić błąd?

Odpowiedz

-3

Możesz użyć @objc przed func lub method, aby zapobiec eksportowaniu dla obiektu C jak poniżej.

extension DispatchQueue { 
    @objc func asyncAfter(delay: TimeInterval, block: @escaping()->()) { 
     DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC), execute: block) 
    } 
} 
+2

jego „@noobjc” dla zapobiegania ... ale to nie rozwiązuje problemu, ponieważ klasa „DispatchQueue” jest nadal eksportowane do „OS_dispatch_queue”, która jest nieznana Objective-C i nadal kończy się niepowodzeniem. –

Powiązane problemy