我只是想知道在编写干净的代码时是否允许这样做。
所以我有一个带有HomeViewController的天气应用程序,你可以调用它,它显示用户当前位置天气的温度,位置名称和日期。
然后,如果我想更改HomeViewController的详细信息,我会点击一个UIButton,它将我引导到不同位置的天气列表,称之为WeatherListViewController。
WeatherListViewController有一个 UITableView,显示不同搜索位置的不同天气并保存它。
我可以点击该列表中的任何天气,然后返回HomeViewController以填充给定的信息。
但是,我被困在一个问题上。在WeatherListViewController中,我需要始终为用户的当前位置提供一个默认的天气单元格。所以我把它保留在第一个索引 0 处。 之后,它只是用户想要搜索并添加到列表中的任何天气。
因此,假设我从当前位置点击天气单元格以外的其他位置,然后选择德克萨斯州的天气单元格。它填充了HomeViewController,它有效。然后,假设我想返回到我的WeatherListViewController并添加更多内容,但用户当前位置的默认天气单元格将切换到TexasWeatherCell作为新索引 0。
因此,我发现了一个有效的黑客,它具有相同模型类型但名称不同的两个属性。defaultWeather,它保存来自用户当前位置的天气信息,另一个是当前天气,它显示不同的天气。
这可行吗?
这是在我的主视图控制器中
private var currentWeather: CurrentWeather? {
didSet {
if let weather = currentWeather {
DispatchQueue.main.async { [weak self] in
self?.setAttributes(forWeather: weather)
}
}
}
}
private var defaultWeather: CurrentWeather?
当然可以。模型CurrentWeather
是一种抽象数据类型。我建议将其重命名为简单Weather
以提高可读性。那么你的代码将是
private var currentWeather: Weather? {
didSet {
if let weather = currentWeather {
DispatchQueue.main.async { [weak self] in
self?.setAttributes(forWeather: weather)
}
}
}
}
private var defaultWeather: Weather?
听起来不错?