我正在尝试禁用一大组各种控件。如果数组是 [Slider1、Slider 2、Slider 3] 或任何其他匹配的 UIControl 集,则此方法工作正常。
let C = [Slider, Button, Label]
for control in C, {
control.enabled = B
}
返回错误“UIView 类型的值没有成员‘已启用’。” 我假设当我混合使用不同类型的 UIcontrol 时,它会将数组键入为 UIView。
有没有办法使这项工作或其他类似有效的方法?
最佳答案
您可以使 UILabel
和 UIControl
符合通用协议(protocol):
protocol HasEnabled : class {
var enabled: Bool { get set }
}
extension UILabel : HasEnabled { }
extension UIControl : HasEnabled { }
然后您可以声明一个 HasEnabled
类型的数组:
let controls : [ HasEnabled ] = [ label, slider, button ]
for control in controls {
control.enabled = true
}
或者声明一个UIView
的数组,但是只遍历元素
符合HasEnabled
:
let controls : [UIView] = [ label, slider, button ]
for case let control as HasEnabled in controls {
control.enabled = true
}
在第一种情况下,编译器确保只有对象
符合HasEnabled
的被添加到数组中。
在第二种情况下,可以添加任意的 UIView
对象
数组,但循环体只对那些符合要求的人执行
到 HasEnabled
。
关于xcode - Swift 混合类型 UIControl 数组,用于质量启用\禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33592619/