您的位置:首页 > 移动开发 > Swift

Swift基础--通知,代理和block的使用抉择以及Swift中的代理

2016-06-29 00:44 585 查看

什么时候用通知,什么时候用代理,什么时候用block

通知 : 两者关系层次太深,八竿子打不着的那种最适合用通知.因为层级结构深了,用代理要一层一层往下传递,代码结构就复杂了

代理 : 父子关系,监听的方法较多的时候使用

block : 父子关系,监听的方法较少的时候使用

Swift中的代理

swift中代理的实现

定义swift中代理的协议

// swift 中的代理必须继承自NSObjectProtocol
protocol VisitorViewDelegate : NSObjectProtocol
{
// 代理中的方法默认必须实现,有可以不实现的情况,以后整理
func visitorViewDidClickRegisterBtn(visitorView : VisitorView)
func visitorViewDidClickLoginBtn(visitorView : VisitorView)
}


声明代理属性

// 代理属性,与OC一样,用weak修饰
weak var delegate : VisitorViewDelegate? // 可选类型,代理可以有也可以没有


在按钮点击的事件中执行代理方法

// 注册按钮的点击
@IBAction func registerBtnClick(sender: UIButton) {
// 监听到点击,通知代理做事情
// 代理中的方法默认是必须实现的(也有可选的,后面再说),所以这里没有判断代理有没有实现相应的方法
delegate?.visitorViewDidClickRegisterBtn(self)
}

// 登录按钮的点击
@IBAction func loginBtnClick(sender: UIButton) {
// 监听到点击,通知代理做事情
delegate?.visitorViewDidClickLoginBtn(self)
}


swift中为了让方法分类更清晰,实现代理或者数据源的方法单独写到分类中

// MARK: - VisitorViewDelegate代理方法
// swift 中为了区分不同类型的代理方法或者数据源方法,通过extension实现了更好的区分
extension BaseTableViewController: VisitorViewDelegate
{

func visitorViewDidClickRegisterBtn(visitorView : VisitorView) {

ChaosLog("")
}

func visitorViewDidClickLoginBtn(visitorView : VisitorView) {

ChaosLog("")
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: