2014-11-04 49 views
0

我添加了一個自定義extension,可以合併兩個dictionaries,但遇到我的方法調用此新擴展時遇到問題。在AppDelegate中定義使用這個新的擴展Swift:'()'不可轉換爲'[String:AnyObject]'

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 
    } 
} 

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

方法

字典擴展

我在這一行收到此錯誤:

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

這個錯誤是什麼意思?我該如何糾正它?

謝謝!

回答

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 
    } 
} 
+0

謝謝你的解釋。完美的作品。沒有意識到值可以被改變,並且能夠保持它的狀態而不分配給變量。 – 2014-11-04 11:26:51

相關問題