我在 Swift 中做了这个简单的扩展:
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)
}
}
在 Project-Swift.h 标头中,它报告以下行的错误:
@interface OS_dispatch_queue (SWIFT_EXTENSION(...))
- (void)asyncAfterDelay:(NSTimeInterval)delay block:(void (^ _Nonnull)(void))block;
@end
错误是:找不到"OS_dispatch_queue"的接口声明
有没有办法防止为Objective-C导出扩展?或者有没有办法修复错误?
我知道
这不是一个答案,但是我在使用公共扩展DispatchQueue时遇到了同样的问题:dispatch_once Swift 3 GCD API 更改后
因此,在我的案例中使用 Vlad 的解决方案帮助我避免了这个持续存在的问题:https://stackoverflow.com/a/41570198/1672521
您可以在
func
或method
之前使用@objc
来防止被导出为 objective-C,如下所示。
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)
}
}