我想提高我对泛型的知识,并且遇到了一个我无法解决的问题。我有两种不同的类型(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