【发布时间】:2021-04-14 12:02:13
【问题描述】:
在 Swift 文档中,我遇到了一段说我可以编写类型约束,如方法或协议。但是,我不明白的是这样写的好处。为什么不简单地传递类(或协议)本身?
文档:https://docs.swift.org/swift-book/LanguageGuide/Generics.html
让我用一个例子来解释。
import Foundation
class A {
init(val: String) {
self.val = val
}
let val: String
}
func someFunction<T: A>(someT: T) {
print(someT.val)
}
func someFunction2(someT: A) {
print(someT.val)
}
// method 1
someFunction(someT: A(val: "asdasd"))
// method 2
someFunction2(someT: A(val: "asdasd"))
在下面的sn-p中,方法一和方法二有什么区别?
【问题讨论】:
-
不确定这是否是唯一原因,但使用
someFunction<T: A>(someT: T)您可以引入通用约束,例如where T: CustomStringConvertable -
对我来说,泛型的优势在类/结构或具有关联类型的协议中比使用单个函数更明显。特别喜欢在这个例子中,当你对 T 有这个限制时。编辑:正如我写的那样,@NewDev 提出了一个很好的理由:)