我在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导出扩展?或者有办法解决错误吗?
答案 0 :(得分:0)
我知道这不是每个人的答案,但我在使用公共扩展名DispatchQueue遇到同样的问题: dispatch_once after the Swift 3 GCD API changes
所以在我的案例中使用Vlad的解决方案帮助我避免了这个不断出现的问题: https://stackoverflow.com/a/41570198/1672521
答案 1 :(得分:-3)
您可以在@objc
或func
之前使用method
,以防止导出为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)
}
}