使用泛型将生成器写入 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"