ios - UIView.appearance() 代理:是否可以使用枚举作为参数传递闭包?
问题描述
我有一种情况,我可能想根据视图的状态为视图设置四种不同的颜色。该视图位于与应用程序分开的框架中:
框架中定义的视图
@objc public enum TestViewState: Int {
case firstState = 0
case secondState
case thirdState
case fourthState
}
final public class TestView: UIView {
public var state: TestViewState = .firstState
@objc public dynamic var colorDependingOnState: ((TestViewState) -> UIColor)? {
didSet {
backgroundColor = colorDependingOnState?(state)
}
}
}
尝试从应用委托设置全局外观:
TestView.appearance().colorDependingOnState = { state in
switch state {
case .firstState:
return .blue
case .secondState:
return .red
case .thirdState:
return .green
case .fourthState:
return .orange
}
}
执行此操作时,我收到此错误:
*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** 非法属性类型,@?对于外观设置器,setColorDependingOnState:'
当然,我可以改为声明四个不同的动态属性,如下所示:
@objc public dynamic var colorDependingOnFirstState = UIColor.blue
@objc public dynamic var colorDependingOnSecondState = UIColor.red
@objc public dynamic var colorDependingOnThirdState = UIColor.green
@objc public dynamic var colorDependingOnFourthState = UIColor.orange
但我更喜欢使用枚举。有没有办法做到这一点?
谢谢您的帮助
解决方案
推荐阅读
- docker - 如何将 Electron GUI 应用程序放入 Docker 容器中?
- linux - 目录中的幻像文件
- mumps - 在调用 Piece 函数时,mumps 字符串是否发生了突变?
- wpf - 控件模板中的 UWP 双向绑定
- rx-java2 - 使用 RxJava2 时,我用什么代替 Func1?
- java - 如何从某个地方开始获取数组的最小值?
- javascript - 查询具有多个参数的数组
- python - 在 python h2o 模块中,如何在使用 h2o.import_sql_select() 导入数据时指定 na_strings?
- swift - 为什么我的 NSWindow 有一个工具栏?我怎样才能让它消失?
- sql - 如何根据外部函数的结果更新表中的列?