使用泛型将生成器写入 Swift 中的自定义字典 class
Write a Generator to custom dictionary class in Swift with Generics
SWIFT/IOS/字典/生成器/序列
我使用博文创建了一个有序字典 http://timekl.com/blog/2014/06/02/learning-swift-ordered-dictionaries/
如博客中所述,我已经为此 class 实现了下标以访问基础字典的成员。
现在在FOR IN循环中遍历字典
for (key, value) in orderedDict
我知道我必须编写生成器和序列。我也知道这两个协议。
来自另一个博客,http://natashatherobot.com/swift-conform-to-sequence-protocol/
我正在尝试创建一个特定于我的字典的生成器,但无法这样做。
在这方面的任何帮助都会非常有帮助
得到答案,
您将必须添加以下代码,使用 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
}
}
}
}
我在 https://github.com/Marxon13/M13DataStructures/blob/master/Classes/OrderedDictionary.swift
上找到了另一个有序字典
并且我使用了那个示例中的条目 var,其中 returns 一个数组,因此我们可以使用数组生成器:
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"
SWIFT/IOS/字典/生成器/序列
我使用博文创建了一个有序字典 http://timekl.com/blog/2014/06/02/learning-swift-ordered-dictionaries/
如博客中所述,我已经为此 class 实现了下标以访问基础字典的成员。
现在在FOR IN循环中遍历字典 for (key, value) in orderedDict
我知道我必须编写生成器和序列。我也知道这两个协议。 来自另一个博客,http://natashatherobot.com/swift-conform-to-sequence-protocol/ 我正在尝试创建一个特定于我的字典的生成器,但无法这样做。 在这方面的任何帮助都会非常有帮助
得到答案, 您将必须添加以下代码,使用 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
}
}
}
}
我在 https://github.com/Marxon13/M13DataStructures/blob/master/Classes/OrderedDictionary.swift
上找到了另一个有序字典并且我使用了那个示例中的条目 var,其中 returns 一个数组,因此我们可以使用数组生成器:
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"