使用 Enums 的关联值将案例从第一个 Enum 链接到第二个,然后从 CaseIterable 第二个调用关联的函数值

问题描述

我正在构建一个天气应用程序,该应用程序将提供对多个天气提供者的访问,我从这些提供者中返回略微到非常不同的数据集。我想让处理数据设置的系统尽可能通用,以加快新提供程序的添加

首先,我有一个枚举 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 (将#修改为@)