【问题标题】:Cannot convert value of type 'NSDictionary' to specified type 'Dictionary'无法将类型“NSDictionary”的值转换为指定类型“Dictionary”
【发布时间】:2017-03-17 17:42:49
【问题描述】:

为什么会这样:

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")

【问题讨论】:

  • 尝试用clientID替换“\(clientID)”
  • 你为什么使用 Swift 2?

标签: ios dictionary swift2 nsdictionary


【解决方案1】:

这应该是你想要的

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。

【讨论】:

    【解决方案2】:

    对于 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]
    

    【讨论】:

    • : Dictionary 是不必要的,甚至可能是一个错误。
    【解决方案3】:

    我们不能用 NSDictionary 代替 Dictionary 吗?它也有效。

    我们需要停止在 swift 中使用 NSDictionary 吗?其中 Dictionary 是 Swift 结构的本机

     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)
    

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 2016-01-12
      相关资源
      最近更新 更多