Swift 3 - 在视图数组上设置 属性

Swift 3 - setting a property on an array of views

我之前能够通过向数组添加多个视图(UIImageViews、UILabels 和 UIButtons)然后遍历数组以进行 属性 更改来清理我的代码,如下所示:

var hideViews = [imageView1, imageView2, label1, button1, button2]
      for eachView in hideViews {
          eachView.isHidden = true
      }

然后变成另一个版本的Swift:

var hideViews = [imageView1, imageView2, label1, button1, button2] as [Any]
      for eachView in hideViews {
          (eachView as AnyObject).isHidden = true
      }

我还能够使用它一次移动多个视图:

for view in viewsToMove {
    (view as AnyObject).frame = CGRect(x: view.frame.origin.x - 30, y: view.frame.origin.y, width: view.frame.width, height: view.frame.height)
}

我现在收到错误:

无法分配给 'Bool!'

类型的不可变表达式

无法分配给 'CGRect!'

类型的不可变表达式

有谁知道我在这里缺少什么,以便在 Swift 3 中执行此操作?

谢谢!

isHiddenframeUIView class 的属性,因此如果您想更新属于 AnyObject 的属性,则不应将它们转换为 AnyObject他们。只要做:

let views: [UIView] = [imageView1, imageView2, label1, button1, button2]

for view in views {
  view.isHidden = true
  view.frame = CGRect(x: ..., y: ...)
}

给定一个 UIView

的数组
let hideViews: [UIView] = ...

您可以隐藏每个视图

hideViews.forEach { [=11=].isHidden = true }

向左移动每个视图30点

hideViews.forEach { [=12=].frame.origin.x -= 30 }

两者

hideViews.forEach {
    [=13=].isHidden = true
    [=13=].frame.origin.x -= 30
}

您不需要强制转换为 Any 或 AnyObject。 这项工作适用于 Swift3:

let v = UIView()
let i = UIImageView()
let l = UILabel()
let b = UIButton()

// Swift auto infers array type, this is equal to write
// let views: [UIView] = [v, i, l, b]
let views = [v, i, l, b]


views.forEach {
    [=10=].isHidden = true
}

//or

for view in views {
    view.frame = CGRect.zero
}