You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift编写通用函数查找Vehicle实例所属类型在数组中首次索引报错问题

报错原因
  • 语法使用错误:is关键字后必须跟随静态编译期已知的类型名,不支持传入动态获取的类型值,你代码中写的$0 is targetObject.Type属于非法用法,targetObject.Type是类型本身的声明写法,不能用来取实例的运行时类型。
  • 编译器无法推导闭包内的表达式返回值类型,因此抛出"Type of expression is ambiguous without more context"的歧义错误。
解决方案

你需要先通过type(of:)方法获取传入实例的运行时类型,再直接比较数组元素的运行时类型和目标类型是否相等即可,修正后的代码如下:

func getFirstIndex<T: Vehicle>(for targetObject: T) -> Int {
    let targetType = type(of: targetObject)
    guard let index = listOfVehicles.firstIndex(where: { type(of: $0) == targetType }) else {
        return -1
    }
    return index
}

修正后调用验证:

  • getFirstIndex(for: vehicle3) 返回值为2,符合预期
  • getFirstIndex(for: vehicle4) 返回值为0,符合预期

内容的提问来源于stack exchange,提问作者Natasha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:15:02