gpt4 book ai didi

swift - 扩展 Dictionary,其中 Key 是 String 类型

转载 作者:IT王子 更新时间:2023-10-29 05:26:11 27 4
gpt4 key购买 nike

我想扩展 Dictionary 的方法,但前提是 Key 是 String 类型。

我试着这样做:

extension Dictionary where Key: String {
mutating func lowercaseKeys() {
for key in self.keys {
self[key.lowercase] = self.removeValueForKey(key)
}
}
}

并得到错误:

Type 'Key' constrained to non-protocol type 'String'

根据这个错误消息,我可以知道我只能使用协议(protocol)进行这种过滤...有没有办法绕过这个?

最佳答案

我相信最能满足您需求的协议(protocol)是 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

关于swift - 扩展 Dictionary,其中 Key 是 String 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33180028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com