2017-07-03 27 views
3

这是一个使用init(重复:count)创建4个子视图的ViewController。使用init(重复:count)创建的视图上的Swift addSubview()不起作用

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

下面是相同的代码只是不使用的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... 
    } 
} 

init closure OK

回答

3

你放UIView相同的实例您的阵列四次英寸你的viewDidLoad只是最终移动那个单一的视图。您需要创建四个不同的UIView实例。

let subviews = (0 ..< 4).map({ _ in UIView() }) 
+0

谢谢!你发现我的错误。我认为你也可以去掉地图闭合上的外部圆括号。 – MH175

+0

你可以但我不喜欢在这种情况下。 –