2014-12-04 78 views
1

我正在用swift编写UIView的新子类。为了清楚起见,我想要一个视图数组,并且我想在初始声明中实例化它们。在swift中初始化视图数组的最佳方法?

如果这是一个int数组,我可以做这样的事情:

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

所以我试图想出某种类似SWIFTY一个班轮,将创建UIButtons数组,而不是Ints。我的第一个想法是(0...4).map() { UIButton.buttonWithType(.Custom) },但如果我这样做(或者如果我用NSObject()替换UIButton代码),我得到一个错误,说''Transition'没有名为'map'的成员。我可以,比如说做map() { "\($0)" }并得到一串字符串。

我的下一个想法只是为了获得int数组,然后再使用地图上那些返回按钮,如:

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

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

回答

3

好的,解决方案对我来说很快:我想我不能安静地忽略我传递给map函数的闭包变量;我需要明确地忽略它。因此,为了得到我的4个按键阵列,我可以使用_地图中的功能,如:

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 
} 
+1

你觉得这是最**清楚**你可以编码的方式?或者可能是最“可爱”的方式。对未来读者的清晰度是巨大的胜利。 Brian Kernighan:“如果你写的时候你的聪明才智,你将如何进行调试?” – zaph 2014-12-05 00:23:39

+1

嗯,我故意留在(可选的)[UIButton]类型注释中,以明确它产生一个UIButton数组。我们显然还在搞清楚编写Swift的最佳实践是什么,但是我认为一旦你看到了这个,之后它不应该感到太疯狂了。 – cmyr 2014-12-05 00:23:54