【问题标题】:Swift: [String: String] is not identical to CGFloat (SwiftJSON)Swift:[String: String] 与 CGFloat (SwiftJSON) 不同
【发布时间】:2015-01-13 08:45:53
【问题描述】:

我正在使用SwiftyJSON 解析JSON array,但无法弄清楚为什么在解析数组以填充Dictionary 时无法使用这些值。

var dictionary = [String: String]()
    for (index: String, subJson: JSON) in json[myArray] {
        let name = subJson["name"].string
        let value = subJson["value"].string
        gameOwned += [name: value]
    }

我在这一行收到此错误:

gameOwned += [name: value]

我将它添加到空字典中是错误的吗?我已经测试了namevalue 的值,它们 println 没有问题。

【问题讨论】:

  • 试试dictionary[name] = value
  • 试试gameOwned! += [name: value]

标签: json dictionary swift


【解决方案1】:

这段代码我也遇到了同样的问题:

func authParam(withParams: [String: AnyObject?]) -> [String: AnyObject?] {
    var params: [String: AnyObject?] = ["user_nonce": self.user_nonce, "user_identifier": self.user_identifier];
    params += withParams; //Error

    return params;
}

我发现将两个字典与

连接起来
var a = ["one": "a"]
a += ["two": "b"]

是错误的,因为这样你连接的是两个数组而不是字典 - 所以 swift 期望一个以 CGFloat 作为键的数组。

我找到了解决方案here at Stackoverflow。只需扩展字典类并添加合并功能

extension Dictionary {
    mutating func merge<K, V>(dict: [K: V]){
        for (k, v) in dict {
            self.updateValue(v as Value, forKey: k as Key)
        }
    }
}

所以现在我可以毫不费力地合并我的字典

func authParam(withParams: [String: AnyObject?]) -> [String: AnyObject?] {
    var params: [String: AnyObject?] = ["user_nonce": self.user_nonce, "user_identifier": self.user_identifier];

    params.merge(withParams); //works fine

    return params;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2015-08-13
    相关资源
    最近更新 更多