无法将类型 'NSDictionary' 的值转换为指定类型 'Dictionary'

Cannot convert value of type 'NSDictionary' to specified type 'Dictionary'

为什么这可能:

var orderRequestUserValues : Dictionary  = [ "ClientID": "TEST",
                                                 "UserName": "sysadmin",
                                                 "Password": "123456",
                                                 "ModuleID": "StockProcessing",
                                                 "FunctionID": "SetStockActivity",
                                                 "TransmissionFlags": 32,
                                                 "TransmissionMethod": 5
    ]

但这不是:

let userName : String = (dataSourceForUserInfo.last?.UserName)!
let password : String = (dataSourceForUserInfo.last?.Password)!
let clientID : String = (dataSourceForUserInfo.last?.ClientID)!
var orderRequestUserValues : Dictionary  = [  "ClientID": "\(clientID)",
                                              "UserName": "\(userName)",
                                              "Password": "\(password)",
                                              "ModuleID": "StockProcessing",
                                              "FunctionID": "SetStockOrder",
                                              "TransmissionFlags": 32,
                                              "TransmissionMethod": 5


    ]

出现错误:无法将类型 'NSDictionary' 的值转换为指定类型 'Dictionary'

我需要它像这样工作,因为我必须像这样向它附加数据:

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

对于 swift2 或 swift3,您需要为字典指定键和值的类型。所以使用下面的代码-

        let userName : String = (dataSourceForUserInfo.last?.UserName)!
        let password : String = (dataSourceForUserInfo.last?.Password)!
        let clientID : String = (dataSourceForUserInfo.last?.ClientID)!
        let orderRequestUserValues : Dictionary  = [  "ClientID": "\(clientID)",
                                                      "UserName": "\(userName)",
                                                      "Password": "\(password)",
                                                      "ModuleID": "StockProcessing",
                                                      "FunctionID": "SetStockOrder",
                                                      "TransmissionFlags": 32,
                                                      "TransmissionMethod": 5


            ] as [String : Any]

这应该是你想要的

var orderRequestUserValues : [String : Any]  = [
    "ClientID": "TEST",
    "UserName": "sysadmin",
    "Password": "123456",
    "ModuleID": "StockProcessing",
    "FunctionID": "SetStockActivity",
    "TransmissionFlags": 32,
    "TransmissionMethod": 5
]

这也适用于字符串插值:

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

还要注意,如果字典是不可变的,您可以使用 let 而不是 var

我们不能写NSDictionary而不是Dictionary。它也有效。

我们需要在 swift 中停止使用 NSDictionary 吗?其中 Dictionary 是 Swift struct

的原生
 let orderRequestUserValues : NSDictionary  = ["ClientID": "\(clientID)",
                                                  "UserName": "\(userName)",
                                                  "Password": "\(password)",
                                                  "ModuleID": "StockProcessing",
                                                  "FunctionID": "SetStockOrder",
                                                  "TransmissionFlags": 32,
                                                  "TransmissionMethod": 5]


    let name = orderRequestUserValues.object(forKey: "Username")
    print(name)