【发布时间】:2016-01-24 15:55:37
【问题描述】:
以下函数在 Int 数组中查找给定项的第二个索引:
func secondIndexOf(item: Int, inArray array: Array<Int>) -> Int? {
if let firstIndex: Int = array.indexOf(item) {
let slice: ArraySlice<Int> = array.suffixFrom(firstIndex + 1)
return slice.indexOf(item)
}
return nil
}
但是,当我尝试创建此函数的通用版本以查找第二个 Equatable 项时,出现错误:
func secondIndexOf<T: Equatable>(item: T, inArray array: Array<T>) -> T? {
if let firstIndex: Int = array.indexOf(item) {
let slice: ArraySlice<T> = array.suffixFrom(firstIndex + 1)
return slice.indexOf(item) // Cannot invoke 'indexOf' with an argument list of type '(T)'
}
return nil
}
为什么这不是有效的 Swift 代码,如果不是 (T),预期的参数列表是什么? Xcode 自动完成显示 indexOf(element: Comparable) 应该与 T 兼容。
【问题讨论】: