swift2 无法将类型'Swift.Dictionary〈Swift.String,protocol〈>>'的值强制转换为'Swift.AnyObject'

jexiocij  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(176)

我尝试在将[String : Any]发送到API之前将其转换为JSON格式。

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格式的方法吗?或者什么是我的最佳替代方法?

k10s72fa

k10s72fa1#

您正在使用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]
dohp0rv5

dohp0rv52#

[String : Any](a.k.a. Dictionary<String, Any>)是一个结构体,而不是对象。因此,它不能被强制转换为AnyObject
但是,Dictionary(显式)通过强制转换桥接到NSDictionary

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

ugmeyewa3#

在Swift 3中,这种方式对我来说非常好。
令可变字典= NSMutableDictionary(字典:新词典结果!)

相关问题