这是对问题Protocol func returning Self的跟进。该协议如下:
以下内容可以正常工作,但每个实现中的
根据http://nshipster.com/swift-default-protocol-implementations/的内容,我尝试了一个全局函数。
然而,当它在实现下面协议的类中被调用时
我遇到了如下错误。当我输入
protocol Copyable {
init(copy: Self)
func copy() -> Self
}
以下内容可以正常工作,但每个实现中的
copy()
函数都完全相同。func copy() -> Self {
return self.dynamicType(copy: self)
}
根据http://nshipster.com/swift-default-protocol-implementations/的内容,我尝试了一个全局函数。
func copy<T : Copyable>(makeCopy: T) -> T {
return makeCopy.dynamicType(copy: makeCopy)
}
然而,当它在实现下面协议的类中被调用时
protocol Mutatable : Copyable {
func mutated() -> Self
}
class C : Mutatable {
var a = 0
required init(_ a: Int) {
self.a = a
}
required init(copy: C) {
a = copy.a
}
func mutated() -> Self {
let mutated = copy(self)
mutated.a++
return mutated // error: 'C' is not convertible to 'Self'
}
}
我遇到了如下错误。当我输入
mutated
时,自动完成会将mutated
显示为(C)
,我不知道这是什么意思。我还尝试在func mutated()
中添加required
,但显然required
只允许在inits
中使用。有没有办法让它工作?
copy(T) -> T
返回调用它的类,为什么原始代码不起作用呢?在mutated()
函数中,它应该返回Self
,对吧?即使有更好的方法,我仍然很想知道Swift是如何工作的。 - aeubanks