美文网首页SwiftSwift开发学习
swift5.x 属性、代理、block、通知传值

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

作者: Bruce_XHG | 来源:发表于2019-12-24 16:40 被阅读0次

    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  {
          
        }
      }
    

    相关文章

      网友评论

        本文标题:swift5.x 属性、代理、block、通知传值

        本文链接:https://www.haomeiwen.com/subject/azrfoctx.html