Iは、以下の特性を有しているObjective Cのクラスがある:Swiftからdispatch_queue_tを参照することによって引き起こされるコンパイラ警告を無視するのは安全ですか?
@property (nonatomic, strong, readonly) dispatch_queue_t couchDispatchQueue;
私はそうのような私はそのプロパティを参照そのクラスのスウィフト拡張有する:私はそれを行う場合
couchDispatchQueue.async {
を、Iは次のコンパイラ警告が表示されます:
プロパティのタイプ 'OS_dispatch_queue * _Nullableは' タイプと互換性がありません 'dispatch_queue_t _Nullable'(別名 'NSObjectの*を')「BZCouから継承されましたchDatabase '
私が見ることができる理由は、私のアプリのはApp-Swift.h
ファイルを生成しているので:
typedef NSObject<OS_dispatch_queue> *dispatch_queue_t;
編集私は
:
@property (nonatomic, readonly, strong) OS_dispatch_queue * _Nullable couchDispatchQueue;
dispatch_queue_t
ながらは次のように定義されました'私が思っていた "さらなる合併症"を考え出した私の元の記述で発行する。このプロパティは、NSObjectからの継承も必要とするObjective Cプロトコルで必要です。 SwiftクラスをNSObjectから継承し、目的のCプロトコルに従うとすぐに、私は警告を受け取ります。
のObjective C:
@protocol Thingness
@property (nonatomic, strong, readonly, nullable) dispatch_queue_t couchDispatchQueue;
@end
スウィフト:次のサンプルコードは、警告をオフに設定するのに十分です
class Thing: NSObject, Thingness {
var couchDispatchQueue: DispatchQueue?
}
私の質問はまだです:私はちょうどこの警告を黙らせるためには、安全です?レーダーを出すべきですか?
まだ再生できません。しかし、私はあなたの主張に矛盾があることに気付きます。一方で、プロパティ '@property(非原子、強、読み取り専用)を宣言します。しかしプロトコルは '@property(非原子、強、読み込み可能、ヌル可能)'と言います。プロトコルとプロパティを並び替えると、スウィフトコードでこれがオプションであることを認識すると、すべてがうまくいきます。 – matt