作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
假设我有一个函数接受一系列“Person”对象。序列可以是一个简单的数组,或者 RealmSwift 的结果,或者列表:
// A simple array
func someFunction(people: [Person]) {
}
// Result
func someFunction(people: Result<Person>) {
}
// List
func someFunction(people: List<Person>) {
}
我不想拥有这 3 个函数,而只想拥有 1 个函数,它采用“Person”对象的通用序列,如下所示:
func someFunction(people: Sequence<Person>) {
}
这样,我可以将数组、结果或列表传递给函数,而不必担心类型不匹配。但显然这在 Swift 中是不允许的。那我该怎么做呢?
最佳答案
编辑Xcode 14.1 和 Swift 5.7.1 今天发布了,有了这些版本,您现在只需:
func someFunction(people: some Sequence<Person>) { ... }
原答案如下。
--
您可以使用 where 子句来完成此操作。在此处阅读有关 where 子句的信息:
https://docs.swift.org/swift-book/LanguageGuide/Generics.html#ID192
要回答您的特定问题,您可以创建一个通用的 Sequence
约束并像这样约束它的 Element
:
func someFunction<S: Sequence>(people: S) where S.Element == Person { ... }
关于ios - 如何在 Swift 中传递类型为 "Sequence"的 "T"作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53166091/
我是一名优秀的程序员,十分优秀!