2014-12-04 79 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