如何防止扩展导出到Objective-C的Swift头?

时间:2017-01-31 06:41:21

标签: ios objective-c swift swift3

我在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导出扩展?或者有办法解决错误吗?

2 个答案:

答案 0 :(得分:0)

我知道这不是每个人的答案,但我在使用公共扩展名DispatchQueue遇到同样的问题: dispatch_once after the Swift 3 GCD API changes

所以在我的案例中使用Vlad的解决方案帮助我避免了这个不断出现的问题: https://stackoverflow.com/a/41570198/1672521

答案 1 :(得分:-3)

您可以在@objcfunc之前使用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)
    }
}