第四周第二天
二元數(shù)組的初始化和調(diào)用
enum PointState {
case Space, Black, White
}
var board: [[PointState]]
board = [[PointState]](count: 15, repeatedValue: [PointState](count: 15, repeatedValue: .Space))
//初始化一個(gè)橫縱都為15的數(shù)組
//它的具體某一個(gè)值得調(diào)用是
board[11][10]
board[i][j]
索引器語(yǔ)法
subscript(row: Int, col: Int) -> Bool {
get { return board[row][col] == .Space }
set(isBlack) {
if board[row][col] == .Space {
board[row][col] = isBlack ? .Black : .White
isBlackTurn = !isBlackTurn//邏輯反運(yùn)算
}
}
}
-------------調(diào)用
func randomMove() {
let row = Int(arc4random_uniform(15))
let col = Int(arc4random_uniform(15))
//這里的renjuBoard既不是數(shù)組也不是字典卻可以通過(guò)下標(biāo)進(jìn)行運(yùn)算查找
if renjuBoard[row, col] {
renjuBoard[row, col] = renjuBoard.isBlackTurn
setNeedsDisplay()
}
}
委托回調(diào)
有的時(shí)候某個(gè)對(duì)象要做某件事情但其自身又沒(méi)有能力做這件事情
這個(gè)時(shí)候就可以使用委托回調(diào)的編程模式讓別的對(duì)象來(lái)做這件事情
//實(shí)現(xiàn)委托回調(diào)的編程模式有以下幾個(gè)步驟:
// 1. 設(shè)計(jì)一個(gè)協(xié)議(被委托方必須要遵循協(xié)議才能給別的對(duì)象當(dāng)委托)
protocol CanvasDelegate: class {
// 協(xié)議里面的方法就是要委托其他對(duì)象做的事情
func showMessage(canvas: Canvas, message: String)
}
// 2. 委托方添加一個(gè)屬性其類(lèi)型是遵循了協(xié)議的被委托方
weak var delegate: CanvasDelegate?
// 3. 自己做不了的事情委托給別的對(duì)象來(lái)做
delegate?.showMessage(self, message: renjuBoard.isBlackTurn ? "白棋勝" : "黑棋勝")
// 4. 讓視圖控制器遵循協(xié)議成為被委托方(協(xié)議表能力)
class ViewController: UIViewController, CanvasDelegate
// 5. 遵循協(xié)議就必須要實(shí)現(xiàn)協(xié)議中的方法(協(xié)議表約定)
func showMessage(canvas: Canvas, message: String) {
let alertController = UIAlertController(title: message, message: "", preferredStyle: .Alert)
let okAction = UIAlertAction(title: "確定", style: .Default) { action in
// 此處通過(guò)尾隨閉包來(lái)定義點(diǎn)擊確定按鈕后要做什么
canvas.clearBoard()
}
alertController.addAction(okAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
// 6. 給畫(huà)布對(duì)象綁定委托(self就是視圖控制器對(duì)象它遵循了協(xié)議所以有充當(dāng)委托的能力也就是說(shuō)可以扮演被委托方的角色)
canvas.delegate = self