【发布时间】:2014-09-05 23:03:02
【问题描述】:
这是问题的后续:Protocol func returning Self。协议如下:
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),我不知道这意味着什么。我也尝试将required 添加到func mutated(),但显然required 只允许用于inits。有什么办法让它工作吗?
【问题讨论】:
标签: swift