Arb*_*tur 12 dictionary protocols extend swift swift2
我想扩展一个Dictionary的方法,但只有当Key是String类型时.
我试着这样做:
extension Dictionary where Key: String {
mutating func lowercaseKeys() {
for key in self.keys {
self[key.lowercase] = self.removeValueForKey(key)
}
}
}
Run Code Online (Sandbox Code Playgroud)
并得到错误:
键入'Key'约束为非协议类型'String'
基于此错误消息,我可以告诉我只能通过协议进行这种过滤...有没有办法绕过这个?
Pat*_*nch 18
我相信最符合您需求的协议是StringLiteralConvertible,只需几行,就可以让您实现这一目标
extension Dictionary where Key: StringLiteralConvertible {
mutating func setAllKeysLowercase() {
for key in self.keys {
if let lowercaseKey = String(key).lowercaseString as? Key {
self[lowercaseKey] = self.removeValueForKey(key)
}
}
}
}
var stringKeyDictionary = [ "Hello" : NSObject(), "World" : NSObject() ]
stringKeyDictionary.setAllKeysLowercase()
print( stringKeyDictionary )
// Prints: ["hello": <NSObject: 0x1007033c0>, "world": <NSObject: 0x1007033d0>]
var numberKeyDictionary = [ 0 : NSObject(), 1: NSObject() ]
numberKeyDictionary.setAllKeysLowercase() //< Won't compile, keys are not strings
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4526 次 |
| 最近记录: |