我有一个惰性序列,我做了一些操作,并希望从一个函数返回
func getSeq() -> ??? {
let a = array.lazy
./* ... operations like map, filter, etc */
}
a
的最终类型为:
LazyMapSequence<FlattenSequence<LazyMapSequence<LazyFilterSequence<LazySequence<[[ComponentId] : ArchetypeId]>.Elements>.Elements, Zip2Sequence<Zip2Sequence<[C1], [C2]>, [C3]>>>, (C1, C2, C3)>
现在,我如何返回一个,而不必指定返回类型为长类型?
1条答案
按热度按时间kb5ga3dv1#
Opaque result types正是为此而创建的,它们是Swift 5.1中添加的,你经常会在SwiftUI中看到它们,其中视图内容表示为
some View
,这意味着结果是一些复杂的泛型类型(用户代码中隐藏了其特定类型),只要它符合View
。对于这里的特殊情况,需要将它们与primary associated types结合使用,以准确地表示结果序列应该生成什么类型的元素,如下所示:
主要关联类型是最近才在Swift 5.7中引入的。据我所知,它们是一个纯粹的编译时特性,因此在运行时不需要任何特定的操作系统版本。
如果苹果不再支持你的Mac电脑,而你又无法运行Swift 5.7所需的Xcode版本,那么你的下一个最佳选择就是像我们以前那样做:使用类型擦除器来擦除具体的类型。对于像您这样的情况,标准库提供了两个类型擦除器,
AnySequence
和AnyCollection
。这限制了要处理的类型信息,所以它可能优化得不那么好,但它足够好用了。