我想在Swift中创建Dictionary
的扩展名,以添加一个名为prepare(for type: String)
的方法。
附加方法的作用基本上是向当前字典添加一个键值对,其中key
是type
而value
来自{{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
答案 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
}
}