假设我有一个采用一系列“人”对象的函数。该序列可以是一个简单数组,也可以是RealmSwift的Result或List:
// 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中是不允许的。那我该怎么办?
答案 0 :(得分:3)
您可以使用where子句执行此操作。在此处了解where子句:
https://docs.swift.org/swift-book/LanguageGuide/Generics.html#ID192
要回答您的特定问题,您可以创建通用的Sequence
约束并像这样约束其Element
:
func someFunction<S: Sequence>(people: S) where S.Element == Person { ... }