第四周第二天
二元数组的初始化和调用
enum PointState {
case Space, Black, White
}
var board: [[PointState]]
board = [[PointState]](count: 15, repeatedValue: [PointState](count: 15, repeatedValue: .Space))
//初始化一个横纵都为15的数组
//它的具体某一个值得调用是
board[11][10]
board[i][j]
索引器语法
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//逻辑反运算
}
}
}
-------------调用
func randomMove() {
let row = Int(arc4random_uniform(15))
let col = Int(arc4random_uniform(15))
//这里的renjuBoard既不是数组也不是字典却可以通过下标进行运算查找
if renjuBoard[row, col] {
renjuBoard[row, col] = renjuBoard.isBlackTurn
setNeedsDisplay()
}
}
委托回调
有的时候某个对象要做某件事情但其自身又没有能力做这件事情
这个时候就可以使用委托回调的编程模式让别的对象来做这件事情
//实现委托回调的编程模式有以下几个步骤:
// 1. 设计一个协议(被委托方必须要遵循协议才能给别的对象当委托)
protocol CanvasDelegate: class {
// 协议里面的方法就是要委托其他对象做的事情
func showMessage(canvas: Canvas, message: String)
}
// 2. 委托方添加一个属性其类型是遵循了协议的被委托方
weak var delegate: CanvasDelegate?
// 3. 自己做不了的事情委托给别的对象来做
delegate?.showMessage(self, message: renjuBoard.isBlackTurn ? "白棋胜" : "黑棋胜")
// 4. 让视图控制器遵循协议成为被委托方(协议表能力)
class ViewController: UIViewController, CanvasDelegate
// 5. 遵循协议就必须要实现协议中的方法(协议表约定)
func showMessage(canvas: Canvas, message: String) {
let alertController = UIAlertController(title: message, message: "", preferredStyle: .Alert)
let okAction = UIAlertAction(title: "确定", style: .Default) { action in
// 此处通过尾随闭包来定义点击确定按钮后要做什么
canvas.clearBoard()
}
alertController.addAction(okAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
// 6. 给画布对象绑定委托(self就是视图控制器对象它遵循了协议所以有充当委托的能力也就是说可以扮演被委托方的角色)
canvas.delegate = self
网友评论