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 中执行此操作?
谢谢!
isHidden
和 frame
是 UIView
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
}
我之前能够通过向数组添加多个视图(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 中执行此操作?
谢谢!
isHidden
和 frame
是 UIView
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
}