gpt4 book ai didi

xcode - Swift 混合类型 UIControl 数组,用于质量启用\禁用

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

我正在尝试禁用一大组各种控件。如果数组是 [Slider1、Slider 2、Slider 3] 或任何其他匹配的 UIControl 集,则此方法工作正常。

let C = [Slider, Button, Label]
for control in C, {
control.enabled = B
}

返回错误“UIView 类型的值没有成员‘已启用’。”我假设当我混合使用不同类型的 UIcontrol 时,它会将数组键入为 UIView。

有没有办法使这项工作或其他类似有效的方法?

最佳答案

您可以使 UILabelUIControl 符合通用协议(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/

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