我想提高我對泛型的知識,並且遇到了一個我無法解決的問題。我有兩種不同的類型(Int
和Double
)。這兩種類型都實現了功能advanced(by:)
。我想製作一個通用函數來調用給定類型的advanced(by:)
。實現通用接口的類型的通用函數
好處是我可以用替代intAdvancedByTen(value:)
和doubleAdvancedByTen(value:)
。
這裏是我的遊樂場:
let myDouble: Double = 1
let myInt: Int = 2
func intAdvanceByTen(value: Int) { // Replace this function
value.advanced(by: 10)
}
func doubleAdvanceByTen(value: Int) { // ...and this function
value.advanced(by: 10)
}
protocol CanAdvance {
func advance(_ by: Any)
}
// ...with this generic function
func genericAdvanceByTen(value: CanAdvance) {
value.advance(10)
}
genericAdvanceByTen(value: myInt) // Error: Argument "Int" does not conform to expected type "CanAdvance"
如何讓通用函數知道,通過類型實現了advanced(by:)
方法?
偉大的作品,我真的很高興。謝謝! :)我很困惑,因爲這是我第一次看到使用大寫'Self',所以這裏有一個鏈接來解釋'self'和'Self'之間的區別:http://stackoverflow.com/questions/27863810/distinction -in-SWIFT之間大寫自和小寫自 – Andrej