我正在使用 swift 编写一个新的 UIView 子类。我想要一个 View 数组,为了清楚起见,我想在初始声明中实例化它们。
如果这是一个 Int 数组,我可以这样做:
let values: [Int] = (0...4).map() { $0 }
因此我正在尝试想出某种类似的快速单行代码,它将创建一组 UIButtons,而不是 Ints。
我的第一个想法是 (0...4).map() { UIButton.buttonWithType(.Custom) } 但如果我这样做(或者如果我将 UIButton 代码替换为,比如说NSObject()) 我收到一条错误消息,指出“'Transition' 没有名为'map' 的成员”。比方说,我可以执行 map() { "\($0)"} 并获得一个字符串数组。
我的下一个想法是先获取一个整数数组,然后在那些上使用 map 来返回按钮,例如:
let values: [UIButton] = (0...4)
.map() { $0 }
.map() { UIButton.buttonWithType(.Custom) }
但这给了我同样的错误。我在这里做错了什么?
请您参考如下方法:
好吧,我很快就找到了解决方案:我想我不能悄悄地忽略传递给 map 函数的闭包变量;我需要明确地忽略它。因此,为了获得我的 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
}
