2016-04-06 1 views
0
私は非常に興味深いのエラーメッセージに実行しているよ

今日Swiftの型(AnyObject)が呼び出されました!swift:タイプ "(AnyObject)"ですか?そこにあるタイプの引数リスト「(ANYOBJECT)」私も知らない</p> </blockquote> <p>と</p> <blockquote> <p>呼び出すことができません「マップ」:

dataHandler: ((AnyObject) ->())?, 

とコードのこの部分でのdataHandlerを実装取得しよう:

dataHandler: { (obj: AnyObject) ->() in ...} 


コンテキストは、私は、HTTPリクエストの後にコールバックとしてクロージャを使用しています、です

この時点で、タイプは「obj」となります。(Anyオブジェクト)...


@ sketchyTechの感動的な答えをありがとう、ObjectMapperはArrayやDictionaryにキャストするような、 "AnyObject"の具体的なタイプが必要なようです。今、私のコードは動作します:

if let dic = res as? [String: AnyObject], res = Mapper<MappableType>().map(dic) { 
     ... 
    } 
+0

'obj'を適切な型にキャストする必要があります(JSONまたはXMLレスポンスの場合は解析する必要があります)。 AnyObjectは、どんなオブジェクトでもあります。 – Mattias

+0

ご回答いただきありがとうございます。そうです。私はObjectMapperを使用していますが、マッパーは「任意の」オブジェクトで作業していません。 – bolerovt

+0

どのようなタイプが必要ですか?配列または辞書? – nhgrif

答えて

2

具体的なタイプではなく、ジェネリック型として使用する場合、AnyObjectはあなたがどんなにObjCメソッドを呼び出すことができます(もちろん、避けるために、実行時にメソッドに対応できなければなりませんクラッシュ)。

コンクリート型として使用する場合、全ての公知の@objc方法及び 特性がAnyObjectの各インスタンスには、それぞれ、暗黙的に開封された、任意の方法 およびプロパティに入手可能です。 (Swiftヘッダファイル)

主な役割は、ObjCとSwiftの厳密な型指定言語の間でオブジェクトを渡すことです。

AnyObjectのインスタンスをより高次のスウィフト関数で使用するには、まずそれらを適用できる型にキャストする必要があります。

dataHandler: {arr in 
    if let a = arr as? [Int] { 
     a.map{$0+1} 
    }} 
+0

ありがとうございました!はい、私は辞書が必要です、そして、これは確かに私の助けとなりました。どうもありがとうございます! – bolerovt

+0

辞書の場合、次のように書くことができます: '{dict in let d = dict as? [String:Int] {a.map {(k、v)in print(v)}}} 'しかし、混合型を受け取ったNSDictionaryの場合は、それを考慮に入れて使用する必要があります'[String:AnyObject]'のように、キャストするものを探します。 – sketchyTech

+0

私は素早くネイティブの.map()を使用していませんが、あなたの答えは本当に感動していました。今のように動作します:if dic = obj as? [String:AnyObject]、res = Mapper ().map(dic){ – bolerovt

関連する問題