【问题标题】:Write a Generator to custom dictionary class in Swift with Generics使用泛型在 Swift 中为自定义字典类编写生成器
【发布时间】:2015-07-28 07:01:48
【问题描述】:
【问题讨论】:
标签:
ios
swift
generics
ordereddictionary
【解决方案1】:
得到了答案,
您必须添加以下代码,使用 SequenceType 扩展 orderedDictionary 并添加 Generate 方法
/// extension class
extension OrderedDictionary: SequenceType {
/// Creates a generator for each (key, value)
func generate() -> GeneratorOf<(Tk , Tv)> {
var index = 0
return GeneratorOf<(Tk , Tv)> {
if index < self.count {
let key = self.keys[index]
let value = self[index]
index++
return (key, value!)
} else {
index = 0
return nil
}
}
}
}
【解决方案2】:
我在 https://github.com/Marxon13/M13DataStructures/blob/master/Classes/OrderedDictionary.swift 上找到了另一个有序字典
我使用了该示例中的条目 var,它返回一个数组,因此我们可以使用数组生成器:
struct ADOrderedDictionary<Tk: Hashable, Tv:Equatable>:SequenceType
(etc.)
var entries:Array<(Tk, Tv)> {
get {
var tempArray:Array<(Tk, Tv)> = []
for key: Tk in keys {
let value = values[key]!
tempArray.append(key, value)
}
return tempArray
}
}
func generate() -> IndexingGenerator<[(Tk,Tv)]>
{
return self.entries.generate()
}
这允许“for (key, value) in orderedDictionary”