第四周第二天

第四周第二天

二元数组的初始化和调用

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 尝试修改首页个人信息栏 改变字体:font-family: Verdana, arial, helvetica, ...
    yisky阅读 205评论 0 0
  • 在线阅读 http://interview.poetries.top[http://interview.poetr...
    前端进阶之旅阅读 114,863评论 24 450
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • 沉迷学习,日渐消瘦,一天不学习,浑身难受。 学习Swift已过一个月,已经从零基础到入门,能够逐渐理顺思绪,找到关...
    Daniel01阅读 181评论 0 0
  • 谈花说爱 凤凰花儿为谁开,幸福等候君去采。 莫在站台空徘徊,爱要大声说出来。 ——2017...
    文字砌匠阅读 119评论 0 3