2014-11-04 3 views
0

Я добавил пользовательский extension, чтобы иметь возможность объединить два dictionaries, но возникли проблемы с моим методом, вызывающим это новое расширение.Swift: '()' не конвертируется в '[String: AnyObject]'

словарь расширение определяется в 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

tokenParams.merge(json) возвращается Void aka (). Вы можете просто исправить этот код:

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

Спасибо за пояснение. Работает отлично. Не знали, какие значения могут быть изменены и иметь возможность сохранить состояние, не присваивая его переменной. –

Смежные вопросы