gpt4 book ai didi

iOS swift : Generic array cast to array of subclass

转载 作者:行者123 更新时间:2023-11-30 13:59:27 25 4
gpt4 key购买 nike

这个问题已经困扰我一段时间了。我不确定我是否遗漏了一些东西,但这不应该起作用吗?

protocol IDIdentifiable { }

class A : IDIdentifiable {
let id : Int
init(id: Int) { self.id = id }
}

class B : IDIdentifiable {
let id : Int
init(id: Int) { self.id = id }
}

func findObjectById<T: IDIdentifiable>(objects: [T], id: Int) -> T {
if let casted = objects as? [A] {
return casted.filter{ $0.id == id }[0]
}
}

将对象参数转换为 A 对象数组时会发生错误。该错误表明“A”不是“T”的子类型,显然情况并非如此。

这真的很烦人,因为我想要一个通用方法,可以以相同的方式处理多个类的对象数组。我首先尝试使用 switch 语句,不创建额外的协议(protocol)(如 IDIdentific),但这些方法都不起作用。

我很高兴收到任何建议!

最佳答案

如果您声明协议(protocol)需要变量 id,则无需在泛型方法中转换类型。

protocol IDIdentifiable {
var id : Int { get set }
}

class A : IDIdentifiable {
var id : Int
init(id: Int) { self.id = id }
}

class B : IDIdentifiable {
var id : Int
init(id: Int) { self.id = id }
}

func findObjectById<T: IDIdentifiable>(objects: [T], id: Int) -> T {
return objects.filter{ $0.id == id }[0]
}

关于iOS swift : Generic array cast to array of subclass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33172813/

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