2016-11-17 5 views
0

ObjectiveCで書かれたフレームワークに完了ハンドラがあります。目的Swiftで使用される配列completionHandler

これはブロックタイプのtypedefです。 PHErrorsの配列を取ります。

typedef void (^PHBridgeSendErrorArrayCompletionHandler)(NSArray *errors); 

私はスウィフトでこれを使用しようとすると、私がやっている....

anObject.aMethod(completionHandler: { (errors: [ AnyObject?]) ->() in 

...rest of code 
} 

しかし、私はこのエラーを取得しておいてください。

Cannot convert value of type '([AnyObject?]) ->()' to expected argument type 'PHBridgeSendErrorArrayCompletionHandler!'

誰でも助けることができる、私はうんざりすると、それは私にとってうまくいくように見えます。

答えて

0

これを試してみてください。..

anObject.aMethod(completionHandler: { (errors:NSArray?) ->() in 

...rest of code 
} 
+0

ありがとうございました。私はすでにそれを試しましたが、私は... '(NSArray?) - >()の値を' PHBridgeSendErrorArrayCompletionHandler! 'という予想される引数型に変換できません。 – user139816

+0

PHBridgeSendErrorArrayCompletionHandlerとは何ですか? cmdをクリックして定義を表示します。 – Sethmr

+0

また、anObject.aMethod(completionHandler:{(errors:[AnyObject?]))は、anObject.aMethod(){エラーが発生しています} – Sethmr

1
anObject.aMethod(completionHandler: { (errors: [ AnyObject?]) ->() in 
} 

は、任意のより深くを掘るために

anObject.aMethod() { errors in 
} 

する必要があり、私はPHBridgeSendErrorArrayCompletionHandler

+0

ありがとうございました。私が質問に投稿したフレームワークから利用できる唯一の定義はtypedef void(^ PHBridgeSendErrorArrayCompletionHandler)(NSArray * errors)でした。 – user139816

+0

最後にAnyを使用して解決しました – user139816

+1

どちらも使用する必要はありません。クロージャーは型を推測するので、私の例のように名前を付けるだけの必要条件です。どんなタイプであるかを明示したいならば、私はすべてのオブジェクトがタイプanyであると信じているので、Anyは動作します。 NSArrayは公式型であり、どの配列がNSArray型のものであるかが分かりません。 – Sethmr

1

が何であるかを知っている必要がありますので、私の友人は、これを解決しましたAnyObjectをAnyに変更するだけで問題になる

(エラー:[Any]?)

NSArrayのすべてのオブジェクトがオブジェクトなので、私にはうんざりです!それで、Anyを試すとは思わなかった。いっそスウィフトの心

2

以上に

イムかなり新しい、あなたはまだtypedeftypealiasとして使用することができます。

typealias PHBridgeSendErrorArrayCompletionHandler = (_ errors: [Error]?) -> Void 

IMPLEMENTATION

func myFunctionWithErrorCompletion(completion: PHBridgeSendErrorArrayCompletionHandler) { 

    // Define empty array to add errors to 
    var errors:[Error]? 

    // Do Your Logic that may store errors to array 

    // Completion and pass errors 
    completion(errors) 
} 

USAGE

を定義
func anotherOfMyFunctions() { 

    // Call the function 
    myFunctionWithErrorCompletion { (errors) in 

     if let completionErrors = errors { 
      // React to errors 
     } 
    } 
} 
関連する問題