我正在研究一些可能的方法来一次从 Swift 字典中提取多个值。目标是做这样的事情:
var dict = [1: "one", 2: "two", 3: "three"]
dict.multiSubscript(2...4) // Should yield ["two", "three", nil]
或者这个:
dict.multiSubscript([1, 2]) // Should yield ["one", "two"]
换句话说,似乎应该可以为任何符合 SequenceType 的下标类型通用地实现 multiSubscript()
。
但是,Swift 似乎不喜欢下面的实现,错误信息也不是很清楚:
extension Dictionary {
func multiSubscript<S: SequenceType where S.Generator.Element == Key>(seq: S) -> [Value?] {
var result = [Value?]()
for seqElt in seq { // ERROR: Cannot convert the expression's type 'S' to type 'S'
result += self[seqElt]
}
return result
}
}
这似乎是对泛型约束的一种相对直接的使用。有人看到我做错了什么吗?
对于奖励积分,有没有办法实现它以允许使用正常的下标语法?例如:
dict[2...4] // Should yield ["two", "three", nil]
最佳答案
我不完全确定为什么 for seqElt in seq
不起作用(我怀疑是错误),但使用 SequenceOf<Key>(seq)
在 for-in 工程中:
func multiSubscript<S: SequenceType where S.Generator.Element == Key>(seq: S) -> [Value?] {
var result = [Value?]()
for seqElt in SequenceOf<Key>(seq) {
result.append(self[seqElt])
}
return result
}
另请注意 result += self[seqElt]
没用;我用了result.append(self[seqElt])
相反。
关于dictionary - 从 Swift 字典中一次提取多个键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985641/