你能解释一下为什么要在Swift的协议中加入初始化器吗?我认为协议的责任是定义具体的实现可以做什么,而不是具体的实现细节。初始化器不就是这样的东西吗?
发布于 2020-01-07 09:42:32
下面是一个非常做作的例子:
protocol P {
init(a: Int)
}
class B: P {
let a: Int
required init(a: Int) {
self.a = a
}
}
func factory<T: P>(a: Int) -> T {
return T(a: a)
}
let b: B = factory(a: 1)通过允许协议(P)指定所需的初始值设定项,我可以编写需要创建新对象的factory函数。
init并没有说明如何处理传入的Int --只是说明可以从Int中生成P的具体值。
发布于 2020-01-07 09:46:23
有时,您实际上希望协议显式声明类型支持特定类型的初始值设定项。事实上,标准库有几个这样的类型,让你自己的一些类型符合它们是很有用的。例如,请查看ExpressibleByArrayLiteral。这就是为什么您可以使用像[1,2,3]这样的数组文字初始化Set的原因
https://stackoverflow.com/questions/59621094
复制相似问题