2017-03-13 12 views
2

swift2.3からswift3に移植していたため、次の問題が発生しました。Swift 3コンテキストタイプ 'AnyObject'辞書リテラルでは使用できません

下記の関数で値辞書の辞書を返そうとしています。しかし、エラーを取得していますContextual type 'AnyObject' Cannot be used with dictionary literal

私はいくつかの答えを探した後に値をAnyObjectとして手作業で試してみましたが、役に立たないです。

typealias Payload = [String: AnyObject]

func toCreatePayload() -> Payload { 
    let payload: [String: [String:AnyObject]] = 
     ["saving_rule": ["description": title as AnyObject, 
         "amount": amount! as AnyObject, 
         "background_color": (backgroundColor?.toHexString())! as AnyObject, 
         "saving_rule_category_id": category!.remoteId as AnyObject, 
         "saving_rule_sub_category_id": subCategory != nil ? subCategory!.remoteId : ("" as AnyObject), 
         "saving_rule_condition_id": condition != nil ? condition!.remoteId : ("" as AnyObject), 
         "saving_rule_condition_customizations_attributes": customizations.map({$0.toCreatePayload()}) as AnyObject, 
         "suspended": "false"] as AnyObject 
     ] 
    return payload as [String:AnyObject] 
} 

答えて

1

使用Any代わりにAnyObject

func toCreatePayload() -> Payload { 
    let payload: [String: [String:Any]] = 
     ["saving_rule": ["description": title, 
         "amount": amount!, 
         "background_color": (backgroundColor?.toHexString())!, 
         "saving_rule_category_id": category!.remoteId, 
         "saving_rule_sub_category_id": subCategory != nil ? subCategory!.remoteId : "", 
         "saving_rule_condition_id": condition != nil ? condition!.remoteId : "", 
         "saving_rule_condition_customizations_attributes": customizations.map({$0.toCreatePayload()}), 
         "suspended": "false"] 
     ] 
    return payload 
} 

差:任意は関数型を含む、全く任意の型のインスタンスを表すことができる

  • オプティオnalタイプ。
  • AnyObjectは、任意のクラスタイプのインスタンスを表すことができます。
+0

戻り値の型は、 'return payload as [String:AnyObject]'のようにキャストする必要があります。 –

+1

@MaTaKazerタイプキャストは必要ありません。タイプアリアスを '[String:Any]'に変更してください。 – vadian

+0

'AnyObject'から' Any'に変更することによる副作用はありますか?私はこれと混同しています。 –

関連する問題