gpt4 book ai didi

swift - 传递给函数的 CoreData 类型

转载 作者:可可西里 更新时间:2023-11-01 01:07:26 24 4
gpt4 key购买 nike

假设我有三个不同的托管对象。每种类型的对象都具有相同的属性。我想编写一个方法来接受这三个对象中的任何一个并为它们的属性赋值。

let car = Car(context: context)
let boat = Boat(context: context)
let plane = Plane(context: context)

getDistanceTraveled(vehicle: car)

func getDistanceTraveled(vehicle: NSManagedObject) {
let newVehicle = vehicle as? Car //Instead of Car I want to cast this as the type being passed in.
newVehicle.distanceTraveled = 43
}

最佳答案

通常,遵循复合重用原则(组合优于继承),我会建议使用协议(protocol)来解决这样的问题,例如

protocol Vehicle {
var distanceTraveled: Float { get set }
}

struct Car: Vehicle {
var distanceTraveled: Float
}

struct Boat: Vehicle {
var distanceTraveled: Float
}

然后将 Vehicle 传递给您的函数:

func getDistanceTravelled(vehicle: Vehicle) -> Float {
return vehicle.distanceTraveled
}

但是,我认为这比上面描述的更复杂,因为 CarBoatPlane 对象由 Core Data 管理并且是 NSManagedObject 的子类。

虽然有一些方法可以解决这个问题,例如

我建议在 Core Data 中创建一个包含共享属性的 Vehicle 父实体,然后使 Vehicle 成为其他实体汽车、飞机等的父实体。

例如

Vehcile entity screenshot

Car entity screenshot

Plane entity screenshot

然后您可以像这样将 Vehicle 托管对象传递到您的函数中:

func getDistanceTravelled(vehicle: Vehicle) -> Float {
return vehicle.distanceTraveled
}

这违背了上面提到的复合重用原则,但我认为由于核心数据的性质,这可能是继承获胜的场景之一。

关于swift - 传递给函数的 CoreData 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55128029/

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