Я согласен с @Sweeper, возможно, ваш дизайн не самый лучший, если вы обнаружили необходимость объединить разные макеты данных под одним и тем же зонтиком. Тем не менее, я хочу поделиться другим возможным подходом к вашей проблеме.
Вместо того, чтобы иметь все свойства Stop
в одном протоколе, вы можете поместить их в другую структуру и получить протокол Stop
, возвращающий эту структуру:
protocol Stop {
var stopData: StopData { get }
}
struct StopData {
var code: String
var stopDescription: String
var latitude: Double
var longitude: Double
}
Затем вы можете добавить следующие соответствия для ваших двух структур:
struct BusStop: Stop {
var code: String
var busStopDescription: String?
var latitude: Double
var longitude: Double
var stopData: StopData {
return StopData(code: code,
stopDescription: busStopDescription ?? "",
latitude: latitude,
longitude: longitude)
}
}
struct TrainStop: Stop {
var code: String
var trainStopDescription: String
var latitude: Double?
var longitude: Double?
var stopData: StopData {
return StopData(code: code,
stopDescription: trainStopDescription,
latitude: latitude ?? 0,
longitude: longitude ?? 0)
}
}
Это означает, что вы будете циркулировать StopData
экземпляров в остальной части приложения вместопротокол Stop
.
PS Я также изменил имена свойств, чтобы они больше соответствовали правилам именования Swift.