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
相关产品推荐
相关产品推荐

