无法将类型 '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)
为什么这可能:
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)