Обычно, следуя принципу составного повторного использования (составление по наследованию), я бы предложил использовать протокол для такой проблемы, как, например,
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
}
Однако я думаю, что это более сложно, чем то, что описано выше, так как объекты Car
, Boat
и Plane
управляются Core Data и являются подклассом NSManagedObject
.
Хотя есть способы справиться с этим, например,
Вместо этого я бы предложил создать родительскую сущность Vehicle
в Базовых данных, которая содержит общие свойства, а затем сделать Vehicle
родительской сущностью вашего автомобиля, самолета и т. Д.
* * Например, тысяча двадцать восемь
Скриншот объекта Vehcile
Скриншот автомобильной сущности
Скриншот сущности самолета
Затем вы можете передать управляемый объект Vehicle
в вашу функцию следующим образом:
func getDistanceTravelled(vehicle: Vehicle) -> Float {
return vehicle.distanceTraveled
}
Это идет вразрез с принципом составного повторного использования, упомянутым выше, но я думаю, что из-за природы базовых данных это может быть один из тех сценариев, где выигрывает наследование.