Swift addSubview() on views created using init(repeating:count) doesn't work

Viewed 614

Here is a ViewController that creates 4 subviews using init(repeating:count).

In viewDidLoad I add them as subviews and set their frames. When I run the application only the last view is added.

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(repeating:count) only adds last view

Here's the same code except instead of using init(repeating:count) I use
a closure. This works fine-- all subviews are added.

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...
    }
}

init closure OK

1 Answers
Related