這是對問題的跟進:Protocol func returning Self。該協議如下:Swift協議和全局函數返回類型
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
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
。任何方式讓這個工作?
好的,所以一切都使用初始化。得到它了。再次感謝! – aeubanks 2014-09-06 16:29:12
我想我的問題是,如果'copy(T) - > T'返回調用它的類,爲什麼原始代碼不工作?在mutated()函數中,它應該返回「Self」,對嗎?即使有更好的方法去做,我仍然很好奇斯威夫特是如何工作的。 – aeubanks 2014-09-06 20:12:42
更新了一些更多的信息 – 2014-09-06 21:00:05