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



我在 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

您可以在

funcmethod之前使用@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)
    }
}

最新更新