gpt4 book ai didi

ios - 作为 Y 的子类的类型 X 的向下转换集

转载 作者:搜寻专家 更新时间:2023-10-31 22:55:49 24 4
gpt4 key购买 nike

注意:虽然问题有一个CoreData例如,它与 CoreData 无关, 这只是一个例子

我们正在使用 CoreData 开发一个 Swift 项目作为缓存层。

我们利用 Notification在我们的 mainViewController多多聆听我们NSManagedObjectContext之后的变化有新变化。

在我们添加具有以下层次结构的新实体之前,这一直很好用:

  • 实体 Vehicle是具有某些属性的基类。
  • 实体 CarVehicle 的子类具有特定属性和与 Human 的 toMany 关系实体。
  • 实体 Human是具有特定属性的基类,它与Car有关系.

Entities

问题如下:
当一个新的 Car添加对象,触发通知,并在 mainViewController 中,我们需要检查它是否属于 Car 类型,像这样:

if let insertedObjects = notification.userInfo?[NSInsertedObjectsKey] as? Set<Car> {
print("we have some cars") // this will never execute
}

垂头丧气的类型Set<Car>永远不会评估为真,因为 Set具有 Car 类型的元素还有Human .

我想要的:
检查 Set具有 Car 类型的 NSManagedObject 子类或 Human当我沮丧时。

我尝试做的事情:
向下转换为 NSManagedObject ,并检查是否 Set包含 Car通过添加以下 where条件:
insertedObjects.contains(Car) ,但它有一个编译时错误:

Cannot convert value of type '(Car).Type' to expected argument type 'NSManagedObject'

如果您有任何问题,请告诉我,而不仅仅是投反对票。

最佳答案

不确定类型转换(我想我记得是用同样的方法做的,而且它起作用了,尽管它是用一个数组),但是检查集合中是否有汽车是不同的:

set.contains { (element) -> Bool in
return element is Car
}

或同一调用的更短(更简洁)版本:

set.contains(where: { $0 is Car })

关于ios - 作为 Y 的子类的类型 X 的向下转换集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47855079/

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