有没有办法创建一个UIViews数组?
我尝试过bot我无法添加值
var views = [UIView?](count: 64, repeatedValue: nil)
这导致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
答案 0 :(得分:4)
在这一行:
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())
}
答案 1 :(得分:1)
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()
答案 2 :(得分:0)
使用Swift 4,您可以使用以下方法之一来解决问题。
Range
和map(_:)
let range = 0 ... 5
let array = range.map { _ in UIView() }
Range
和for循环var array = [UIView]()
for _ in 0 ..< 5 {
array.append(UIView())
//array += [UIView()] //also works
}
AnyIterator
let anyIterator = AnyIterator(UIView.init)
let array = Array(anyIterator.prefix(5))
Sequence
和IteratorProtocol
协议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)