美文网首页
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)
    }
  }

相关文章

  • OC与swift的数据传输

    简介 该项目主要介绍了oc与swift之间、swift内部几种常见的传值方式(属性传值、代码块传值、代理传值、通知...

  • 11.4页面传值

    //一、AppDelegate.swift // //AppDelegate.swift //页面传值 // //...

  • swift传值

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

  • OC和Swift比较

    OC与swift 1.协议 OC:主要用来传值 swift:不仅可以用来传值,swift中的协议可以定义属性方法,...

  • Flutter_嵌套APP

    flutter 代码块 swift 传值 原生 to flutter 传值 flutte to 原生 写在后面...

  • Swift界面传值

    Swift中界面传值的方法 主要有三种 1.代理传值2.闭包传值(即OC中的Block) 属性传值 代理传值 F...

  • iOS之传值

    在iOS中传值的方式有很多种方式,有最普遍的就是属性传值,代理传值,block传值等方式了。写了OC和swift的...

  • swift 代理传值

    swift中的代理传值跟oc中的用法基本一样,都是用于反向传值,这里假设a界面向b界面传值为正向传值,则: 在b界...

  • 04.iOS 传值问题总结(不同的传值方式)

    这是OC版的不同传值方式,传送门,大神写的真不错,吱吱~OC版的传值介绍 辣么,Swift 3.0 传值的方式有哪...

  • Swift 和OC的blcok属性不一致问题

    组件之间进行属性传值的时候,如果通过CTMediator来进行block传值,swift和OC间就会出现block...

网友评论

      本文标题:swift传值

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