【发布时间】:2017-04-04 06:43:12
【问题描述】:
我有一个具有以下属性的 Objective C 类:
@property (nonatomic, strong, readonly) dispatch_queue_t couchDispatchQueue;
我有该类的 Swift 扩展,我在其中引用该属性,如下所示:
couchDispatchQueue.async {
当我这样做时,我会收到以下编译器警告:
属性类型“OS_dispatch_queue * _Nullable”与继承自“BZCouchDatabase”的类型“dispatch_queue_t _Nullable”(又名“NSObject *”)不兼容
我明白为什么了,因为我的应用生成的 App-Swift.h 文件有:
@property (nonatomic, readonly, strong) OS_dispatch_queue * _Nullable couchDispatchQueue;
而dispatch_queue_t被定义为:
typedef NSObject<OS_dispatch_queue> *dispatch_queue_t;
编辑
我已经找出了我在原始描述中遗漏的“进一步的并发症”。 Objective C 协议需要此属性,该协议也需要从 NSObject 继承。一旦我让 Swift 类继承自 NSObject 并符合目标 C 协议,我就会收到警告。以下示例代码足以引发警告:
目标 C:
@protocol Thingness
@property (nonatomic, strong, readonly, nullable) dispatch_queue_t couchDispatchQueue;
@end
斯威夫特:
class Thing: NSObject, Thingness {
var couchDispatchQueue: DispatchQueue?
}
我的问题仍然是:让这个警告静音对我来说安全吗?我应该提交雷达吗?
【问题讨论】:
-
我仍然无法重现。但是,我注意到您的声明前后不一致。一方面,您声明了一个属性
@property (nonatomic, strong, readonly)。但是协议说@property (nonatomic, strong, readonly, nullable)。当我把协议和属性结合起来,当我在我的 Swift 代码中确认这个东西现在是一个 Optional 时,一切都很好。
标签: objective-c swift3