我有具有以下性質的目標C類:忽略由Swift引用dispatch_queue_t引起的編譯器警告是否安全?
@property (nonatomic, strong, readonly) dispatch_queue_t couchDispatchQueue;
我有類的夫特延伸,其中我引用屬性像這樣:
couchDispatchQueue.async {
當我做到這一點,我得到下面的編譯器警告:
房產類型 'OS_dispatch_queue * _Nullable' 與類型 'dispatch_queue_t _Nullable'(又名 'NSObject的*')不兼容的「BZCou繼承chDatabase'
我明白爲什麼,因爲我的應用程序的生成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(非原子,強壯,只讀)'。但協議說'@屬性(非原子,強壯,只讀,可空)'。當我將協議和屬性放在一行時,並且當我在我的Swift代碼中承認此事現在是可選時,一切都很好。 – matt