问题描述
我正在构建一个天气应用程序,该应用程序将提供对多个天气提供者的访问,我从这些提供者中返回略微到非常不同的数据集。我想让处理数据设置的系统尽可能通用,以加快新提供程序的添加。
首先,我有一个枚举 npm install -g
,它包含所有可以返回值的可能单位:
RValueUnits
例如,某些提供商可能会以 .mm 为单位返回降水量,而其他提供商可能会以 .cm 为单位返回。
我想要的是每个提供者都有一个他们自己的枚举,列出他们返回的所有属性,包括返回类型。例如:
enum RValueTypes { /// returned value
case cm
case celsius
case decimal
case mm
case percentage
case inch
/// etc
}
与每个案例关联的 setter 函数处理属性的数据设置。例如,它会将提供者的返回值类型与用户的偏好进行比较,如果不同,它会在将其设置为关联属性的值之前进行更改,例如上述情况中的enum DarkSkyProps: CaseIterable {
static var allCases: [DarkSkyProps] {
return [
.apparentTemperature(unit: .celsius,setter: setApparentTemperature)
]}
case apparentTemperature(unit: RValueType,setter: () throws -> Void)
}
。
apparentTemperature
首先,我希望 DarkSkyProps 是 CaseIterable,所以设置是自动的。但是,我不知道如何调用迭代案例的关联 setter 函数:
static func setApparentTemperature() throws {
/// processing logic goes here
}
其次,理想情况下,我还希望有 enum ForecastSource,例如:
for property in DarkSkyProps.allCases {
/// want to call property.setter()
}
并且每个都与一个 Props 枚举相关联(即 ForecastSource.DarkSky 链接到 DarkSkyProps),例如:
enum ForecastSource {
case DarkSky
case Foreca
}
这样我就只需要写一些类似的东西,例如:
case DarkSky(props: DarkSkyProps.AllCases)
有办法吗?
最后,考虑到我的目标,是否有更合适的完全不同的方法?
非常感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)