在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
(是的,我知道
typealias
和Key
必须替换为特定字典的类型。但是,这些类型在这里并不重要)。 最佳答案
如果您正在编写一个包含SequenceType
类型元素的自定义Element
,您可以这样编写生成器:
public func generate () -> AnyGenerator<Element> {
var generator = objs.keys.generate()
return AnyGenerator {
return generator.next ()
}
}
因为上面的代码是在
SequenceType,
范围内实现的,Element
类型是众所周知的。你这些人不必从objs.keys.generate()
中“推断”类型,你只需将其用作Element
。