这是使用初始化的正确方法吗?

时间:2015-08-07 11:46:41

标签: swift

对,所以我总是用函数初始化,但我是这个快速初始化的新手,所以这样我正确地初始化了这个2d数组。

var board = [[UIButton]](){
   init(array:UIButton){
       board = [
          [b0,b1,b2],
          [b3,b4,b5],
          [b6,b7,b8]

    ] 
  }
}

1 个答案:

答案 0 :(得分:1)

您的board变量必须使用一系列按钮进行初始化,因此在包含您的电路板的类中,您指定了init(boardButtons:)初始值设定项,用于初始化board变量:

class ClassThatContainsBoard {

    var board: [[UIButton]]

    init(boardButtons: [UIButton]) {
        let b = boardButtons
        board = [
            [b[0], b[1], b[2]],
            [b[3], b[4], b[5]],
            [b[6], b[7], b[8]]
        ]
    }
}

如果您的班级本身知道哪些按钮应该包含电路板,则您无需指定将按钮作为参数的初始化器。变量可以使用闭包来将自己初始化为默认值:

class ClassThatContainsBoard {

    var board: [[UIButton]] = {
        var numRows = 3
        var numCols = 3
        var newBoard = [[UIButton]]()

        for row in 0..<numRows {
            var boardRow = [UIButton]()

            for col in 0..<numCols {
                let buttonNumber = (row + 1) * (col + 1)
                let button = UIButton(type: .Custom)
                button.setTitle("\(buttonNumber)", forState: .Normal)
                boardRow.append(button)
            }

            newBoard.append(boardRow)
        }

        return newBoard
    }()
}

因此,当初始化ClassThatContainsBoard的实例时,将执行闭包并返回board的默认值。在这里,它刚刚初始化为3x3按钮阵列,每个按钮的标题设置在棋盘上的编号位置。