如何在Swift中将类型为“ T”的“序列”作为参数传递?

时间:2018-11-06 05:15:46

标签: ios swift

假设我有一个采用一系列“人”对象的函数。该序列可以是一个简单数组,也可以是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中是不允许的。那我该怎么办?

1 个答案:

答案 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 { ... }