Swift初级-三种反向传值方式通知,代理,闭包Swift初级-三种反向传值方式通知,代理,闭包

 闭包

1.第二控制器申明一个闭包类型

typealias BackBlock = (String) -> Void

2.第二控制器定义一个变量

var BackBlockClousure : BackBlock?

3.第一控制器实现回调

let VC = segue.destination as! DetailsViewController
VC.BackBlockClousure = {
     (backStr:String) -> Void in
       print(backStr)
}

4.第二控制器传值

self.BackBlockClousure!("闭包反向传值")

通知

第一个页面

//接受通知
        let NotifMycation = NSNotification.Name(rawValue:"MyNSNotification")
        NotificationCenter.default.addObserver(self, selector: #selector(upDataChange(notif:)), name: NotifMycation, object: nil)
deinit {
        //移除通知
        NotificationCenter.default.removeObserver(self)
    }
    
    //接收到后执行的方法
    func upDataChange(notif: NSNotification) {
        guard let text: String = notif.object as! String? else { return }
        self.text.text = text
    }

第二个页面

//发送通知
let NotifMycation = NSNotification.Name(rawValue:"MyNSNotification")
    func tempbuttonAction() {
        //这个方法可以传一个值
        NotificationCenter.default.post(name: NotifMycation, object: self.textField.text)
        //这个方法可传一个字典
//        NotificationCenter.default.post(name: NotifMycation, object: nil, userInfo: ["" : ""])
       self.dismiss(animated: true, completion: nil)
    }

delegate

B页面

protocol passByValueDelegate {
    func didDeleteText(text:String)
}
var delegate : passByValueDelegate?
    //按钮点击事件
@objc func btn1Action(){
     delegate?.didDeleteText(text: "delegate传值")
     self.navigationController?.popViewController(animated: true)
}
A页面

遵循passByValueDelegate代理

 let detail = BlockNotiDelegateDetailVC()
 detail.delegate = self
 self.navigationController?.pushViewController(detail, animated: true)
/*passByValueDelegate*/ 
func didDeleteText(text: String) {
  print("delegate===",text)
 
 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值