2016-11-20 5 views
1

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? 
} 

私の質問はまだです:私はちょうどこの警告を黙らせるためには、安全です?レーダーを出すべきですか?

+0

まだ再生できません。しかし、私はあなたの主張に矛盾があることに気付きます。一方で、プロパティ '@property(非原子、強、読み取り専用)を宣言します。しかしプロトコルは '@property(非原子、強、読み込み可能、​​ヌル可能)'と言います。プロトコルとプロパティを並び替えると、スウィフトコードでこれがオプションであることを認識すると、すべてがうまくいきます。 – matt

答えて

1

状況はよく説明されていますが、再現できません。私はObjective-Cのクラスファイルに

@property (nonatomic, strong, readonly) dispatch_queue_t couchDispatchQueue; 

を宣言すると、生成されたヘッダは

open var couchDispatchQueue: DispatchQueue! { get } 

は、このように通常のスウィフト3 DispatchQueueと見られている、とcouchDispatchQueue.asyncに私の呼び出しがで警告を生成しない私を示していすべて。

明らかに、2つの方法で試しました。私は.hファイルのcouchDispatchQueueプロパティをThingクラスとして宣言しました。 SwiftにThing.hを輸入しました。私はこのコードをSwiftに書いた:

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

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

ストレートインスタンスメソッド呼び出しも拡張子も、警告が表示されません。

+0

これは奇妙です!私は、私の派生したデータを削除しようとしてきれいにビルドして、私はまだ問題が発生しました!なぜ私の生成されたヘッダーが違うのですか?私はXcode 8.1を使用しています。 –

+0

私が考えることができる唯一のことは、あなたの状況には、それが関連しているかどうかわからないので、あなたが言及していないいくつかのさらなる合併症があることです。 :)もしあなたが好きなのであれば、私はあなたに私のテストプロジェクトを提供してうれしいです。ちょっと待って、私はドロップボックスに貼り付けます... – matt

+0

ここに行きます:https://www.dropbox.com/s/c1mc7csbkgrkx36/Test.zip?dl=0 – matt

関連する問題