My Swift 3.0プロジェクトでは、特定のタイプ(AsyncBlock
)をObj- Cブロック:任意の値に不随意のポインタに翻訳する必要がありスイフト3.0換算でSwift 3から、id *ポインタをパラメータとして使用してObj-Cブロックとして定義された型を使用する方法
typedef BOOL (^AsyncBlock)(id __nullable * __nonnull context);
は、私は私の中で定義された閉鎖にタイプAsyncBlock
の変数を割り当てることができるはず考え出しswift 3プロジェクトは次のようになります(簡略化のためヘッダーとその他の細部のブリッジは含まない):
func closure(_ context: UnsafeMutablePointer<Any?>) -> Bool { return true } var myClosureVariable: AsyncBlock = closure
コンパイラは同意しない:Cannot assign value of type '(UnsafeMutablePointer<Any?>) -> Bool' to type 'AsyncBlock'
- 私が間違って何をやっていますか?
のObjective-CのARCは、マニュアル参照カウントと互換性がなければなりません。間接的なポインタを渡すと、呼び出されたブロック、関数、メソッドなどの内部でどのように動作するのかは不明です。オートレリースされたという慣例があります。私。 e。 http://stackoverflow.com/questions/8862023/in-which-situations-do-we-need-to-write-the-autoreleasing-ownership-qualifier –