假设我有一个函数,它接受一系列“Person”对象。该序列可以是一个简单的数组,或者 RealmSwift 的 Result,或者 List:
// A simple array
func someFunction(people: [Person]) {
}
// Result
func someFunction(people: Result<Person>) {
}
// List
func someFunction(people: List<Person>) {
}
Run Code Online (Sandbox Code Playgroud)
我不想拥有这 3 个函数,而是只想要 1 个函数,该函数采用“Person”对象的通用序列,如下所示:
func someFunction(people: Sequence<Person>) {
}
Run Code Online (Sandbox Code Playgroud)
这样,我可以将数组、结果或列表传递给函数,而不必担心类型不匹配。但显然这在 Swift 中是不允许的。那我该怎么做呢?
编辑: Xcode 14.1 和 Swift 5.7.1 今天发布,通过这些版本,您现在可以通过以下方式执行此操作:
func someFunction(people: some Sequence<Person>) { ... }
Run Code Online (Sandbox Code Playgroud)
原始答案如下。
--
您可以使用 where 子句来完成此操作。在这里阅读有关 where 子句的信息:
https://docs.swift.org/swift-book/LanguageGuide/Generics.html#ID192
要回答您的具体问题,您可以创建一个通用Sequence约束并对其进行约束,Element如下所示:
func someFunction<S: Sequence>(people: S) where S.Element == Person { ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
692 次 |
| 最近记录: |