Objective c 忽略由引用Swift的调度队列引起的编译器警告安全吗?
我有一个目标C类,它具有以下属性: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
@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 {}
}
}