斯威夫特:'()'不能转换为' [String:AnyObject]'

时间:2014-11-04 11:09:15

标签: ios dictionary swift

我添加了一个自定义extension,可以合并两个dictionaries,但我的方法无法调用此新扩展程序。

在AppDelegate中定义的字典扩展

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

使用此新扩展程序的方法

class func addFbTokenParameter(json: [String: AnyObject]) -> [String: AnyObject] {
    if KeychainManager.getString(KeychainManager.StaticVars.kFbToken) != nil {
        let token = KeychainManager.getString(KeychainManager.StaticVars.kFbToken)!

        var tokenParams: [String: AnyObject] = [
            kFacebook: [
                kToken: token
            ]
        ]

        var finalParams: [String: AnyObject] = tokenParams.merge(json)
        return finalParams
    }
    else {
        return json
    }
}

我在这一行收到此错误:

var finalParams: [String: AnyObject] = tokenParams.merge(json)

这个错误是什么意思?我该如何纠正呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

tokenParams.merge(json)正在返回Void又名()。 您可以通过以下方式修复此代码:

tokenParams.merge(json)
var finalParams: [String: AnyObject] = tokenParams

您的扩展程序需要将变异字典返回以进行分配:

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

        return self
    }
}