SwiftSwift开发学习

swift5.x 属性、代理、block、通知传值

2019-12-24  本文已影响0人  Bruce_XHG

1、属性传值:
属性传值和我们使用oc的时候是一样的,比如我们常用的跳转的时候进行的属性传值

let vc = ALCourseListDetailRootViewController()
vc.type = 1
self.navigationController.pushViewController(vc, animated: true)

在属性传值的时候我们还会经常使用到,重写属性的set方法,达到刷新数据的目的

var _studentListArr: [ALCourseClassStudentsItemModel] = []
    var studentListArr:[ALCourseClassStudentsItemModel] {
        get{
            return _studentListArr
        }
        set{
            _studentListArr = newValue
            self.tableView.reloadData()
        }
    }

说实在的swift的重写set方法比oc麻烦多了
2、代理传值:
代理传值也是和oc是一样的,也是语法上有些区别
声明代理

protocol ALCourseListDetailLeftViewDelegate: NSObjectProtocol {
    
    func ALCourseListDetailLeftViewClick(item: Any, index:Int)
    func ALCourseListDetailLeftViewCellClick(item: ALCourseClassStudentsItemModel)
    func ALCourseListDetailLeftGroupAllClick()
    
}
weak var delegate:ALCourseListDetailLeftViewDelegate?

然后在需要传值的地方调用

self.delegate?.ALCourseListDetailLeftViewCellClick(item: itemModel)

在所需要的文件里面遵循代理,实现代理的方法就OK了
3、block传值:
block的使用和oc也是一样的,但是语法上需要注意,以及swift对block的声明

typealias requestSuccessDataBlock = (_ objc:Any,_ headerRefresh:Bool) -> Void
var requestSuccessDataBlock: requestSuccessDataBlock!
if self?.requestSuccessDataBlock != nil {
                    self?.requestSuccessDataBlock(self?.dataArr as Any, true)
                }
viewModel.requestSuccessDataBlock = {[weak self] (objc: Any, headerRefresh:Bool) -> Void in
            if (objc as! NSArray).count > 0 {
                if headerRefresh == true {
                    self?.learnContentView.dataArr = NSMutableArray(array: objc as! NSArray)
                }else{
                    let temp = self?.learnContentView.dataArr
                    temp!.addObjects(from: (objc as! NSArray) as! [Any])
                    self?.learnContentView.dataArr = temp!
                }
            }
        }

4、通知:
我们都知道通知也是可以传值的

NotificationCenter.default.post(name: Notification.Name(rawValue: "notoceName"), object: self, userInfo: ["model":model.learnM as LearningFileItemModel])

NotificationCenter.default.addObserver(self, selector: #selector(textDidChange), name: "notoceName", object: self)

@objc func textDidChange(notification: Notification) {
    if let sender = notification.object  {
      
    }
  }
上一篇下一篇

猜你喜欢

热点阅读