2
下面的函數找到在Int的陣列某一項目的第二個指標:爲什麼在嘗試調用通用ArraySlice的indexOf時會出錯?
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
}
爲什麼這不是有效的銀行代碼,什麼是預期的參數列表,如果不是(T)
? Xcode自動完成顯示indexOf(element: Comparable)
,其中T
應該兼容。
哦......當然了!謝謝。錯誤消息讓我困惑。 – titaniumdecoy
這個錯誤信息在Swift 2.2中有所改進:http://swiftlang.ng.bluemix.net/#/repl/ef45c06738a7fddb48e6b3e6e97d409945d3e84d7e3befac7cf6034678baefd0 –
現在你指出了,我想返回類型應該是'Array。索引?'而不是'Int'。 –
titaniumdecoy