【问题标题】:Could not cast value of type 'Swift.Dictionary<Swift.String, protocol<>>' to 'Swift.AnyObject'无法将“Swift.Dictionary<Swift.String,protocol<>>”类型的值转换为“Swift.AnyObject”
【发布时间】:2017-03-17 21:20:25
【问题描述】:

我正在尝试将我的[String : Any] 转换为 JSON 格式,然后再将其发送到 API。

var orderRequestUserValues : [String : Any]   = [ "ClientID": "\(clientID)",
                                                       "UserName": "\(userName)",
                                                       "Password": "\(password)",
                                                       "ModuleID": "StockProcessing",
                                                       "FunctionID": "SetStockOrder",
                                                       "TransmissionFlags": 32,
                                                       "TransmissionMethod": 5


    ]

var requestParameters : [String : Any] = [  "ActivityType": 2,
                                            "ActivityReference1": "",
                                            "ActivityReference2": "",
                                            "Notes": "",
                                            "ProcessingUserUnique": 1
                                            ]

requestParameters.updateValue(usedObjectDictionaries, forKey: "ListofStockActivityData")


orderRequestUserValues.updateValue(requestParameters, forKey: "RequestParameters")

但是因为我的转换方法需要AnyObject,所以我尝试强制转换它,但收到错误:

无法将“Swift.Dictionary>”类型的值转换为“Swift.AnyObject”。

do{

   let newDict = try NSJSONSerialization.dataWithJSONObject(orderRequestUserValues as! AnyObject, options: NSJSONWritingOptions.PrettyPrinted)  // Inflicts an error

   let decoded = try NSJSONSerialization.JSONObjectWithData(newDict, options: [])

我是否必须使用另一种转换为 JSON 格式的方法,或者我最好的替代方法。

【问题讨论】:

    标签: json swift dictionary swift2


    【解决方案1】:

    在 Swift 3 中,这种方式对我来说非常有效。

    让 mutableDict = NSMutableDictionary(dictionary: newDictionaryResult!)

    【讨论】:

      【解决方案2】:

      [String : Any] (a.k.a. Dictionary&lt;String, Any&gt;) 是一个结构体,而不是一个对象。因此,它不能转换为AnyObject

      但是,Dictionary(显式)通过强制转换桥接到NSDictionary

       let newDict = try NSJSONSerialization.dataWithJSONObject(orderRequestUserValues as NSDictionary, options: NSJSONWritingOptions.PrettyPrinted)
      

      【讨论】:

      • 我最好的选择是什么?
      • 无法将类型 '[String : Any]' 的值转换为强制类型 'Dictionary<_ _>'
      • 糟糕,我打错了。我的意思是NSDictionary。根据上一句,您本可以了解它:p
      • 首先必须将 [String : Any] 更改为 [String : AnyObject]
      • 工作!!!!!!!但有一个警告为“从'[String:AnyHashable]'到'NSDictionary'的条件转换总是成功”(p as?NSDictionary)!其中 p 是 [String:AnyHashable]
      【解决方案3】:

      您正在使用 Swift 2,而您遇到的问题是 Any 无法转换为 AnyObject。从Any 向下转换为AnyObject 是不可能的。所以将你的字典声明为[String: AnyObject] 而不是[String: Any]

      var orderRequestUserValues : [String : AnyObject]   = [ "ClientID": "\(clientID)",
                                                         "UserName": "\(userName)",
                                                         "Password": "\(password)",
                                                         "ModuleID": "StockProcessing",
                                                         "FunctionID": "SetStockOrder",
                                                         "TransmissionFlags": 32,
                                                         "TransmissionMethod": 5]
      

      【讨论】:

      • 是的(:只是在 Api 读取 JSON 时遇到了一些问题
      • @LenxvanZyl 您可以为此发布另一个问题。 :)
      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多