Swift -- 等同于 typealias 中的 typeof 的惯用语

Swift -- Idiomatic equivalent to typeof in typealias

在 Swift 中,我正在编写自定义 SequenceType,实现非常简单 generate()

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

然而,Generator 不是一个实际的类型——它只是指一个 typealias,我必须在我的类型的其他地方手动指定它。

点开Dictionary的声明,elements.keys.generate()的类型似乎很复杂,几乎是编译器的一个实现细节。我觉得定义我的类型别名的最干净的方法是

typealias Generator = typeof(elements.keys.generate())

但是,Swift显然没有typeof指令。有没有比使用以下丑陋且稍微脆弱的代码更简洁的方法来编写我的 typealias

typealias Generator = LazyBidirectionalCollection<MapCollectionView<[Key : Value], Key>>.Generator

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

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

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

因为上面的代码是在您的 SequenceType, 范围内实现的,所以 Element 类型是众所周知的。你不需要 'infer' 来自 objs.keys.generate() 的类型,你只需将它用作 Element.