ios - 如何在 Swift 中传递类型为 "Sequence"的 "T"作为参数?

标签 ios swift

假设我有一个函数接受一系列“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/

相关文章:

ios - 停止 UIDynamicAnimator Whit View 限制

ios - 分享 pdf 文档 .Swift

ios - 如何从 Realm 文件中删除一个类

ios - 如何在swift中使用视觉框架从其特征点提取外唇

ios - 将 PHAsset 从一个相册移动/复制到另一个相册

ios - SWIFT:为什么我无法在 UIWebView 中加载当前 URL?

ios - 从应用委托(delegate)获取当前 View Controller

ios - 通过广告跟踪 Facebook 应用安装

ios - 命令行 Swift 构建 - 此 libswiftCore.dylib 副本需要 10.14.4 之前的操作系统版本

快速 setter 导致 exc_bad_access