这是一个使用init创建4个子视图的ViewController(重复:计数)。
在viewDidLoad中,我将它们添加为子视图并设置它们的帧。当我运行应用程序时,只添加了最后一个视图。
class ViewController: UIViewController {
let subviews = [UIView].init(repeating: UIView(), count: 4)
override func viewDidLoad() {
super.viewDidLoad()
for i in 0..<subviews.count {
self.view.addSubview(subviews[i])
self.subviews[i].backgroundColor = UIColor.red
self.subviews[i].frame = CGRect(x: CGFloat(i) * 35, y: 30, width: 30, height: 30)
}
}
}
这是相同的代码,除了使用init(重复:计数)而不是使用
关闭。这很好 - 所有子视图都已添加。
class ViewController: UIViewController {
let subviews: [UIView] = {
var subviews = [UIView]()
for i in 0..<4 {
subviews.append(UIView())
}
return subviews
}()
override func viewDidLoad() {
//same as above...
}
}
答案 0 :(得分:3)
您已在阵列中放置了相同的UIView
实例四次。您的viewDidLoad
最终会移动该单一视图。您需要创建UIView
的四个单独实例。
let subviews = (0 ..< 4).map({ _ in UIView() })