在swift中初始化一系列视图的最佳方法?

时间:2014-12-04 23:32:03

标签: ios arrays swift uikit

我正在使用swift编写一个新的UIView子类。我希望有一个视图数组,为了清楚起见,我想在初始声明中实例化它们。

如果这是一个Int数组,我可以这样做:

let values: [Int] = (0...4).map() { $0 }

所以我试图想出一些类似的漂亮的单行程,它将创建一个UIButton数组,而不是Ints。

我的第一个想法是(0...4).map() { UIButton.buttonWithType(.Custom) },但是如果我这样做(或者如果我用NSObject()替换UIButton代码),我会收到错误消息,说明"'转换'没有名为' map'"的成员。我可以,比如做map() { "\($0)" }并得到一个字符串数组。

我的下一个想法是先获取一个int数组,然后使用那些上的map来返回按钮,例如:

let values: [UIButton] = (0...4)
    .map() { $0 }
    .map() { UIButton.buttonWithType(.Custom) }

但这给了我同样的错误。我在做什么错了,在这里?

1 个答案:

答案 0 :(得分:3)

好的,解决方案很快就出现了:我想我无法悄悄地忽略我传入地图功能的闭包变量;我需要明确地忽略它。因此,要获得我的4个按钮数组,我可以在map函数中使用_,如下所示:

var buttons = (0...4).map() {_ in UIButton.buttonWithType(.Custom) }

或我最终使用的内容:

lazy var buttons: [UIButton] = (0...4).map() { _ in
    let button = UIButton.buttonWithType(.Custom) as UIButton
    self.addSubview(button)
    return button
}