Ios 在swift中初始化视图数组的最佳方法?
我正在使用swift编写UIView的一个新子类。我想要一个视图数组,为了清晰起见,我想在初始声明中实例化它们 如果这是一个Int数组,我可以这样做:Ios 在swift中初始化视图数组的最佳方法?,ios,arrays,swift,uikit,Ios,Arrays,Swift,Uikit,我正在使用swift编写UIView的一个新子类。我想要一个视图数组,为了清晰起见,我想在初始声明中实例化它们 如果这是一个Int数组,我可以这样做: let values: [Int] = (0...4).map() { $0 } var buttons = (0...4).map() {_ in UIButton.buttonWithType(.Custom) } 因此,我试图提出一种类似的快速单行程序,它将创建一个UIButton数组,而不是INT 我的第一个想法是(0…4).map(
let values: [Int] = (0...4).map() { $0 }
var buttons = (0...4).map() {_ in UIButton.buttonWithType(.Custom) }
因此,我试图提出一种类似的快速单行程序,它将创建一个UIButton数组,而不是INT
我的第一个想法是(0…4).map(){UIButton.buttonWithType(.Custom)}
但是如果我这样做(或者如果我用NSObject()替换UIButton代码),我会得到一个错误,说“'Transition'没有名为'map'的成员”。比如说,我可以执行map(){“\($0)”}
并获取字符串数组
我的下一个想法是首先获取一个int数组,然后在这些数组上使用map返回按钮,如:
let values: [UIButton] = (0...4)
.map() { $0 }
.map() { UIButton.buttonWithType(.Custom) }
但这给了我同样的错误。我做错了什么,这里?好吧,我很快找到了解决方案:我想我不能悄悄地忽略传递给map函数的闭包变量;我需要明确地忽略它。因此,要获得4个按钮的数组,我可以在map函数中使用u,如下所示:
let values: [Int] = (0...4).map() { $0 }
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
}
你觉得这是你编写代码的最清晰的方式吗?或者也许是最“可爱”的方式。对未来的读者来说,清晰是最大的胜利。Brian Kernighan:“如果您在编写它时尽可能地聪明,那么您将如何调试它?”我特意在(可选)[UIButton]类型注释中留下,以明确这将生成一个UIButton数组。很明显,我们仍在寻找写Swift的最佳实践,但我认为,一旦你看过这篇文章,事后就不会觉得太疯狂了吧?