Objective c 忽略由引用Swift的调度队列引起的编译器警告安全吗?

Objective c 忽略由引用Swift的调度队列引起的编译器警告安全吗?,objective-c,swift3,Objective C,Swift3,我有一个目标C类,它具有以下属性: @property (nonatomic, strong, readonly) dispatch_queue_t couchDispatchQueue; 我有一个该类的快速扩展,其中我引用了该属性,如下所示: couchDispatchQueue.async { 当我这样做时,我得到以下编译器警告: 属性类型“OS_dispatch_queue*_Nullable”与从“BZCouchDatabase”继承的类型“dispatch_queue\u t_Nu

我有一个目标C类,它具有以下属性:

@property (nonatomic, strong, readonly) dispatch_queue_t couchDispatchQueue;
我有一个该类的快速扩展,其中我引用了该属性,如下所示:

couchDispatchQueue.async {
当我这样做时,我得到以下编译器警告:

属性类型“OS_dispatch_queue*_Nullable”与从“BZCouchDatabase”继承的类型“dispatch_queue\u t_Nullable”(也称为“NSObject*)不兼容

我知道原因了,因为我的应用程序生成的
app Swift.h
文件有:

@property (nonatomic, readonly, strong) OS_dispatch_queue * _Nullable couchDispatchQueue;
dispatch\u queue\t
定义为:

typedef NSObject<OS_dispatch_queue> *dispatch_queue_t;
斯威夫特:

class Thing: NSObject, Thingness {
    var couchDispatchQueue: DispatchQueue?
}

我的问题仍然是:我对这个警告保持沉默安全吗?我应该申请雷达吗?

情况描述得很好,但我无法重现。当我宣布

@property (nonatomic, strong, readonly) dispatch_queue_t couchDispatchQueue;
在Objective-C类文件中,生成的头显示

open var couchDispatchQueue: DispatchQueue! { get }
因此,这被视为一个正常的Swift 3 DispatchQueue,我对
couchDispatchQueue.async
的调用根本不会产生任何警告

说清楚了,我试过两种方法。我在.h文件中为一个Thing类声明了
couchDispatchQueue
属性。我把这个东西输入了斯威夫特。然后我用Swift写下了这段代码:

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        Thing().couchDispatchQueue.async {}
    }
}

extension Thing {
    func test() {
        self.couchDispatchQueue.async {}
    }
}

无论是在直接实例方法调用中还是在扩展中,我都没有看到任何警告。

这太奇怪了!我已经尝试删除我的派生数据并进行了清理和构建,但我仍然遇到了问题!为什么我生成的标题会不同?我使用的是Xcode 8.1。我能想到的唯一一件事是,在您的情况中还有一些您没有提到的更复杂的问题(因为您不知道这是相关的,我当然也不知道它是什么)。:)如果你愿意,我很乐意给你我的测试项目。等一下,我会把它放在我的储物箱里…我发现了问题!请看我问题的编辑。我仍然无法复制。然而,我注意到你的要求有不一致之处。一方面,您声明了一个属性
@property(非原子、强、只读)
。但该协议称
@属性(非原子、强、只读、可空)
。当我把协议和属性放在一起,当我在Swift代码中承认这个东西现在是可选的时,一切都很好。
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        Thing().couchDispatchQueue.async {}
    }
}

extension Thing {
    func test() {
        self.couchDispatchQueue.async {}
    }
}