Swift:如何创建Dictionary的扩展以在集合

时间:2018-02-18 16:12:33

标签: swift dictionary extension-methods

我想在Swift中创建Dictionary的扩展名,以添加一个名为prepare(for type: String)的方法。

附加方法的作用基本上是向当前字典添加一个键值对,其中keytypevalue来自{{1} }}

基本上我尝试做的是创建一个基于Dictionary的type,你在下面看到的Model协议只是一些样板代码来做一些基本的数据处理,比如getById ,插入,更新,删除。

到目前为止,我已尝试过一些东西......

Model
  

这个会抛出错误

     

extension Dictionary: Model { mutating func prepare(forType type: String) { self[type] = findByType(type); } func findByType(type: String) -> String { return "TYPE-" + type; } }

     在Cannot subscript a value of type 'Dictionary<Key, Value>' with an index of type 'String'

self[type] = findByType(type)
  

这个会抛出错误

     

extension Dictionary: Model { mutating func prepare(forType type: String) { self.merge(newDict) { (_, new) in new }; } }

     在Cannot convert value of type '[String : Any]' to expected argument type '[_ : _]'

self.merge协议看起来像这样。

Model

1 个答案:

答案 0 :(得分:2)

Dictionary是通用的,键可以是符合Hashable且值可以为Any的任何内容。

您的扩展程序使用具体的String键和String值,因此您需要添加约束,并且还有另一条错误消息缺少参数标签'type:'in call self[type] =行。

删除尾随分号,这不是Objective-C

extension Dictionary where Key == String, Value == String {
    mutating func prepare(forType type: String) {
        self[type] = findByType(type: type)
    }

    func findByType(type: String) -> String {
        return "TYPE-" + type
    }
}