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

标签 xcode swift

我正在尝试禁用一大组各种控件。如果数组是 [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/

相关文章:

xcode - Git 不跟踪文件夹中的文件 - 来自 .xcassets 的 contents.json

ios - 延迟沿着 BezierPath 动画 UIView

swift - 在 JSQMessagesViewController 的群聊中为每个用户分配不同的颜色?

arrays - 如何在Foreach循环中编写条件

ios - 无法调用 UITableViewDataSource 方法,即使光标在调试时也无法进入这些方法

swift - 如何在 macOS 中进入真正的全屏模式?

ios - 更新 Xcode 中的框架和约束(Interface Builder)

ios - 在长字符串中修改时间格式正则表达式的发生

ios - 每次移动到不同 View Controller 时都会加载 Firestore 数据

android - ADT Eclipse 在调试期间像 xCode 一样执行代码