【发布时间】:2016-11-21 21:20:27
【问题描述】:
我想增加我对泛型的了解,但遇到了一个我无法解决的问题。我有两种不同的类型(Int 和 Double)。这两种类型都实现了一个函数advanced(by:)。我想创建一个通用函数来调用给定类型的advanced(by:)。
这样做的好处是我可以用一个 genericAdvancedByTen(value:) 替换 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:)方法?
【问题讨论】: