美文网首页
swift传值

swift传值

作者: 初光夫 | 来源:发表于2017-06-02 15:24 被阅读120次

    本文将介绍swift中的传值方式:属性传值、代理传值、闭包传值、通知传值
    本文将在两个VC之间进行传值:HomeVC、PushVC

    1.属性传值

    属性传值是最常用的正向传值方式,下面过伪代码简单展示

    //HomeVC中
      override func viewDidload() {
        super.viewDidLoad()
        let pushVC = PushVC()
        pushVC.str = "属性传值"
        //假设就在这里跳了,别太计较哦,下同
        self.navigationController?.pushViewController(pushVC,  animated : true)
      }
    
    //PushVC中
      var str : String?
      override func viewDidLoad () {
        super.viewDidLoad()
        print(str!) //str -- 属性传值
      }
    

    2.代理传值

    废话不多说直接上代码

    //HomeVC中
      class HomeVC : UIViewController, PushVCDelegate {
        override func viewDidLoad() {
          super.viewDidLoad()
          let pushVC = PushVC()
          pushVC.delegate = self
          self.navigationController?.pushViewController(pushVC, animated : true)
        }
        func pushDelegatePassValue(str : String) {
          print(str) //str--代理传值
        }
    }
    
    //PushVC中
      protocol PushVCDelegate {
        func pushDelegatePassValue(str : String)
      }
      class PushVC : UIViewController {
        var delegate : PushVCDelegate?
    
        //假设这里是button的点击事件
        func buttonClick {
          self.delegate?.pushDelegatePassValue(str : "代理传值")
          self.navigationController?.popViewController(animated : true)
        }
      }
    

    3.闭包传值

    闭包传值分两种情况:直接定义闭包传值、用typealias定义闭包类型传值
    a.直接定义闭包传值

    //HomeVC中
      class HomeVC : UIViewController {
        override func viewDidLoad() {
          let pushVC = PushVC()
          pushVC.closure = { (str) -> Void in
            print(str) //str -- 闭包传值
          }
          self.navigationController?.pushViewController(pushVC, animated : true)
        }
      }
    
    //PushVC中
      class PushVC : UIViewController {
        let closure : ((String) -> Void)?
        //假设这里是button的点击事件
        func buttonClick {
          self.closure!("闭包传值")
          self.navigationController?.popViewController(animated : true)
        }
      }
    

    b.用typealias定义闭包类型传值

    //HomeVC中
      class HomeVC : UIViewController {
        override func viewDidLoad() {
          let pushVC = PushVC()
          pushVC.closurePassValue(closureType : { (str) -> Void in
            print(str) //str -- 闭包传值
          })
          self.navigationController?.pushViewController(pushVC, animated : true)
        }
      }
    
    //PushVC中
      typealias Closure : (String) -> Void 
      class PushVC : UIViewController {
        var closure : Closure!
        //假设这里是button的点击事件
        func buttonClick {
          self.closure("闭包传值")
          self.navigationController?.popViewController(animated : true)
        }
        func closurePassValue (closureType : (String) -> Void) {
          self.closure = closureType
        }
      }
    

    4.通知传值

    通知传值和oc没啥区别,但是还是要写一下的

    //HomeVC中
      class HomeVC : UIViewController {
        override func viewDidLoad() {
          super.viewDidLoad()
          
        }
    
      //假设这里是button的点击事件
      func buttonClick {
        let pushVC = PushVC()
        NotificationCenter.default.addObserver(forName : NSNotification.Name(rawValue : "haha"), object : nil, queue : OperationQueue.main) { (notify) in
            if let str = notify.userInfo?["666"] {
              print(String(describing : str)) //str -- 通知传值
            }
          }
          self.navigationController?.pushViewController(pushVC, animated: true)
        }
    
        deinit {
          NotificationCenter.default.removeObserver(self)
        }
      }
    
    //PushVC中
      class PushVC : UIViewController {
        override func viewDidLoad() {
          super.viewDidLoad()
          
        }
    
      //假设这里是button的点击事件
        func buttonClick {
          NotificationCenter.default.post(name : NSNotification.Name(rawValue : "haha"), object: self, userInfo: ["666" : "通知传值"])
          self.navigationController?.popViewController(animated: true)
        }
      }
    

    相关文章

      网友评论

          本文标题:swift传值

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