【问题标题】:Array of UIViewsUIViews 数组
【发布时间】:2014-11-11 19:31:01
【问题描述】:

有没有办法创建 UIViews 数组?

我试过机器人我无法添加值

var views = [UIView?](count: 64, repeatedValue: nil)

结果为零

views[0]?.backgroundColor = UIColor.redColor()

我也试过了

var views = NSMutableArray()
for (var a = 0; a<100; a++){
        views[a] = UIView()
}
views[0].backgroundColor = UIColor.redColor() // fails

【问题讨论】:

    标签: ios cocoa-touch swift uikit


    【解决方案1】:

    在这一行:

    var views = [UIView?](count: 64, repeatedValue: nil)
    

    您正在创建一个可选数组,用nil 填充 - 这就是您使用repeatedValue 参数设置的内容。正确的做法是:

    var views = [UIView](count: 64, repeatedValue: UIView())
    

    但是请注意,它只创建一个 UIView 实例,并将其分配给所有 64 个元素。 另外,除非有特殊原因,否则我认为您不需要一组可选项,因此应考虑使用[UIView]

    也就是说,如果您想要一个唯一实例数组,您可以使用以下代码:

    var views = [UIView]()
    for _ in 1...100 {
        views.append(UIView())
    }
    

    【讨论】:

      【解决方案2】:
      var views = [UIView]()
      views.reserveCapacity(100) // not necessary but improves performance just a little bit
      for var i = 0; i < 100; i++ {
              views.append(UIView())
      }
      views[0].backgroundColor = UIColor.redColor()
      

      【讨论】:

        【解决方案3】:

        使用 Swift 4,您可以使用以下方法之一来解决您的问题。


        #1。使用Rangemap(_:)

        let range = 0 ... 5
        let array = range.map { _ in UIView() }
        

        #2。使用 Range 和 for 循环

        var array = [UIView]()
        for _ in 0 ..< 5 {
            array.append(UIView())
            //array += [UIView()] //also works
        }
        

        #3。使用AnyIterator

        let anyIterator = AnyIterator(UIView.init)
        let array = Array(anyIterator.prefix(5))
        

        #4。使用符合SequenceIteratorProtocol 协议的自定义结构

        struct ViewSequence: Sequence, IteratorProtocol {
        
            let count: Int
            private var index = 0
        
            init(count: Int) {
                self.count = count
            }
        
            mutating func next() -> UIView? {
                guard index < count else { return nil }
                defer { index = index.advanced(by: 1) }
                return UIView()
            }
        
        }
        
        let sequence = ViewSequence(count: 5)
        let array = Array(sequence)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-06
          • 1970-01-01
          • 2020-12-06
          • 1970-01-01
          • 2013-02-16
          相关资源
          最近更新 更多