gpt4 book ai didi

kotlin - 如何在 kotlin 数据类中使用枚举

转载 作者:行者123 更新时间:2023-12-02 13:25:19 24 4
gpt4 key购买 nike

我有这个模型

data class HourlyModel(
val time: String,
@DrawableRes val image: Int,
val temp: Double
)
我意识到服务器将为我提供天气代码,这些代码可以转换为将显示的图标。我想如果我将 @DrawableRes 拉入枚举,可能会更好,因为我有今天天气和每周天气预测的模型。
所有 3 种型号都将使用相同的天气代码。
我是 Kotlin 的新手,但我认为如果我有一个枚举类,我应该能够以某种方式在每个模型中使用它
enum class WeatherTypes (
val weatherCode: Int,
@DrawableRes val drawable: Int
) {
SUNNY(0, R.drawable.sunny_t),
RAIN(1,R.drawable.rain_t);

companion object {
fun weatherToImage(weatherCode: Int) = when(weatherCode) {
0 -> SUNNY
1 -> RAIN
else -> SUNNY
}
}
}
有人可以帮助我并告诉我应该对我的模型做些什么来使用这个枚举类来替换 @DrawableRes 吗?如果我不能,那么对我来说最好的选择是什么?

最佳答案

我假设你有不同层的不同模型。假设您有一个用于从服务器接收的数据的数据类。

data class HourlyDto(
val time: String,
val weatherCode: Int,
val temp: Double,
)
您的域模型将是这样的:
data class HourlyModel(
val time: String,
val weatherType: WeatherType,
val temp: Double,
)
我重构了你的枚举类:
enum class WeatherType(
@DrawableRes val imageResId: Int,
) {
SUNNY(R.drawable.sunny_t),
RAIN(R.drawable.rain_t);

companion object {
fun from(weatherCode: Int): WeatherType {
return WeatherType.values()[weatherCode]
}
}
}
现在,您可以将远程模型映射到域模型。让我们为此创建一个扩展函数(例如,您可能会以另一种方式这样做)
fun HourlyDto.mapToModel(): HourlyModel {
return HourlyModel(
time,
WeatherType.from(weatherCode),
temp
)
}
最后,您可以使用您可以获得可绘制的资源 ID,如下所示:
val hourlyWeather: HourlyModel = ...
hourlyWeather.weatherType.imageResId
注:这回答了如何在模型类中使用枚举的问题,但我想要解决这个特定问题,您可以使用原始模型(带有可绘制资源 ID),然后创建一个接受 weathercode 的辅助函数。并返回可绘制的资源 ID 并在任何需要的地方重用。

关于kotlin - 如何在 kotlin 数据类中使用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64520761/

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