在Swift中,我正在编写一个自定义的SequenceType实现:

func generate() -> Generator {
    return elements.keys.generate()
}

但是,generate()不是一个实际的类型——它只是指一个Generator,我必须在类型的其他地方手动指定它。
点击与typealias相关的声明,Dictionary的类型似乎很复杂,而且几乎是编译器的一个实现细节。我觉得定义类型别名的最干净的方法是
typealias Generator = typeof(elements.keys.generate())

然而,Swift显然没有elements.keys.generate()指令。有没有什么比使用下面丑陋而脆弱的代码更干净的方法来编写我的typeof
typealias Generator = LazyBidirectionalCollection<MapCollectionView<[Key : Value], Key>>.Generator

(是的,我知道typealiasKey必须替换为特定字典的类型。但是,这些类型在这里并不重要)。

最佳答案

如果您正在编写一个包含SequenceType类型元素的自定义Element,您可以这样编写生成器:

 public func generate () -> AnyGenerator<Element> {
    var generator = objs.keys.generate()
    return AnyGenerator {
      return generator.next ()
    }
  }

因为上面的代码是在SequenceType,范围内实现的,Element类型是众所周知的。你这些人不必从objs.keys.generate()中“推断”类型,你只需将其用作Element

10-04 23:13
查看更多