【问题标题】:Write a Generator to custom dictionary class in Swift with Generics使用泛型在 Swift 中为自定义字典类编写生成器
【发布时间】:2015-07-28 07:01:48
【问题描述】:

SWIFT / IOS / 字典 / 生成器 / 序列

我使用博文http://timekl.com/blog/2014/06/02/learning-swift-ordered-dictionaries/创建了一个有序字典

如博客中所述,我已经为这个类实现了下标来访问底层字典的成员。

现在在 FOR IN 循环中遍历字典 for (key, value) in orderedDict

我知道我必须编写一个生成器和序列。我也知道这两个协议。 来自另一个博客,http://natashatherobot.com/swift-conform-to-sequence-protocol/ 我正在尝试创建一个特定于我的字典的生成器,但无法这样做。 在这方面的任何帮助都会非常有帮助

【问题讨论】:

标签: 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”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2017-05-12
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多