gpt4 book ai didi

ios - 测试列表是否包含 Swift 中特定类型的元素

转载 作者:搜寻专家 更新时间:2023-11-01 06:22:46 26 4
gpt4 key购买 nike

我目前正在尝试编写一些代码来检查列表是否包含给定类型 T 的元素,但遇到了麻烦。本质上,这个列表包含大量不同类型的元素——然而,这些类型中的每一个都是从一个父类型中继承下来的。我试过了

class Entity { }
class Goal : Entity { }
class Player : Entity { }

var entities = [Entity]()
entities.append(Player())

func listContainsClass<T: Entity>(var list: [Entity]) -> Bool {
for entity in entities {
if entity is T {
return true
}
}

return false
}

let contains = listContainsClass<Goal>(entities)

在这种情况下,我收到一个编译器错误,指出“无法显式特化通用函数”。如果我尝试在不指定通用参数的情况下运行该函数(仅通过键入 listContainsClass(entities)),编译器将退出并出现 seg-fault 11 代码并且 xCode 崩溃,这是一个单独的问题。

我也试过将类类型作为参数传递:

func listContainsClass(var list: [Entity], var type: Entity.Type) -> Bool {
for entity in entities {
if entity === type {
return true
}
}

return false
}

let contains = listContainsClass(entities, Player.self)

但我不确定如何让它工作,因为它总是返回 false。也许这只是一种旧的思维方式,因为我来自 obj-c 背景。

如果您能以正确的方式做到这一点,我们将不胜感激!

最佳答案

你们太亲密了!使用您的第二个(非通用)实现,并且:

if entity.dynamicType === type {

关于ios - 测试列表是否包含 Swift 中特定类型的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30688102/

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