gpt4 book ai didi

swift - 如何根据三元表达式声明变量类型?

转载 作者:搜寻专家 更新时间:2023-11-01 06:54:06 25 4
gpt4 key购买 nike

我有这个枚举:

enum WeatherMapDisplayType {
case temperature
case wind
}

我可以像这样声明一个变量吗?

let markerView: mode == .temperature ? WeatherMapItemTemp : WeatherMapItemWind = UIView.fromNib()

知道 mode 是类型 WeatherMapDisplayType

我怎样才能优雅地处理这种情况?

编辑:

我希望能够做这样的事情:

let markerView: WeatherMapItem = UIView.fromNib()
markerView.frame = CGRect(x: 0, y: 0, width: 80, height: 30)
markerView.setupWeatherInformations(mode: self.currentDisplayMode, forecast: forecasts)
marker.iconView = markerView

以前我只有 WeatherMapItem 类型。

然后我被要求添加另一个天气图项目,这就是为什么我现在有 WeatherMapItemTempWeatherMapItemWind(也对应于我的枚举显示类型)。


func setupWeatherInformations(forecast: Forecast.HourlyForecast)

这是我的自定义类中的一个方法,用于配置 socket 。

但是如果我从框架初始化自定义 View ,我将无法访问此方法,因为它是 UIView 类型。

最佳答案

为这些 View 添加通用协议(protocol):

protocol WeatherMapItem where Self: UIView {
func setupWeatherInformations()
}

class WeatherMapItemTemp: UIView, WeatherMapItem {
func setupWeatherInformations() {
// setup
}
}

class WeatherMapItemWind: UIView, WeatherMapItem {
func setupWeatherInformations() {
// setup
}
}

向枚举添加一个计算变量:

enum WeatherMapDisplayType {
case temperature
case wind

var view: (UIView & WeatherMapItem)? {
var nibName: String? = nil
switch self {
case .temperature:
nibName = "WeatherMapItemTemp"
case .wind:
nibName = "WeatherMapItemWind"
}
if let nibName = nibName, let views = Bundle.main.loadNibNamed(nibName, owner: nil), views.count > 0 {
return views[0] as? UIView & WeatherMapItem
}
return nil
}
}

现在您可以像这样生成一个 View :

// assuming mode is the variable of type WeatherMapDisplayType
let view = mode.view
view?.setupWeatherInformations()
return view

关于swift - 如何根据三元表达式声明变量类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54941431/

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