gpt4 book ai didi

swift - 为什么在尝试对通用 ArraySlice 调用 indexOf 时会出现错误?

转载 作者:可可西里 更新时间:2023-11-01 02:18:01 24 4
gpt4 key购买 nike

以下函数在 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 兼容。

最佳答案

编译器在这里给了你一个令人困惑的错误消息——它实际上并不关心参数。返回值是问题的根源,因为您返回的不是 T 类型的值,而是数组的索引。您只需要将返回类型更改为 Int?:

func secondIndexOf<T: Equatable>(item: T, inArray array: Array<T>) -> Int? {
if let firstIndex: Int = array.indexOf(item) {
let slice: ArraySlice<T> = array.suffixFrom(firstIndex + 1)
return slice.indexOf(item)
}
return nil
}

关于swift - 为什么在尝试对通用 ArraySlice 调用 indexOf 时会出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34973203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com