swift语法(传值)

304 阅读2分钟
正向传值

正向传值应该是最简单的一种传值.在需要传值的地方,创建接受对象.

//接受传值对象
class SecondVC: UIViewController {
  var nameStr:String?
}
//传值
        let secVC = SecondVC.init()
        secVC.nameStr = "hello world"
        self.present(secVC, animated: true)

上面的代码就是一个简单的正向传值例子

反向传值
先来看协议传值

从viewcontroller跳转到SecondVC中.然后再返回Viewcontroller的时候,传值. 和oc中一样,在swift中也是可以分为6步的 上代码

//先定义
protocol BackForwardDelegate {
    func backchuanzhi(index:NSInteger) ->Void

}
//定义属性
var delegate:BackForwardDelegate?

//传值
if let testdelegate = delegate {
      testdelegate.backchuanzhi(index: 10)

  }

在接受值的地方需要遵守协议进行数据处理

//首先要遵守协议
class ViewController: UIViewController,BackForwardDelegate {

//跳转到seconde界面
       let secVC = SecondVC.init()
       //使用代理协
        secVC.delegate = self
        self.present(secVC, animated: **true**)
//实现方法,处理传递数据
func backchuanzhi(index: NSInteger) {
        print("协议传递的是:\(index)"
    }

上面的代码就解释了使用协议实现方向传值的步骤

在oc中除了delegate还可以使用block来传值.而在swift中可以使用闭包来传值.它和block是类似的

闭包传值
//定义一个闭包
typealias BackBlock = (_ index:NSInteger) -> Void
//声明一个闭包
var testBlock:BackBlock?
//触发闭包
if testBlock != nil {
     self.testBlock!(1)
 }

//在viewcontroller中出发闭包回调
    let secVC = SecondVC.init()
        //使用闭包
      secVC.testBlock = { [weak self] (index:NSInteger) in
         print("反向传递过来的参数是:\(index)")
     }
通知传值

通知传值是可以1对多的,什么意思呢.就是创建一个通知.可以在不同的界面接受.

//创建发送的通知
NotificationCenter.default.post(name: Notification.Name(rawValue: "TestNoti"), object: self, userInfo: ["key" : "123456"])

//在需要的地方去接受 注意通知名称要相同
NotificationCenter.default.addObserver(**self**, selector: **#selector**(notibtnclick(noti:)), name: Notification.Name(rawValue: "TestNoti"), object: **nil**)
//接受数据
@objc func notibtnclick(noti:Notification){
        print(noti.userInfo)
   }
//要销毁删除通知 在那个界面调用addobserver,就对应的去删除通知
deinit{
        NotificationCenter.default.removeObserver(**self**)

    }
单例

单例是在app启动的时候,第一次的时候去创建.之后就不需要创建.杀掉进程的时候,单例也随之释放.类似于一个全局的变量

//创建单例对象
class PersonManger: NSObject {
    var age:NSInteger?
    static let shareinstance = PersonManger()
//    private override init(){}

}
//赋值
PersonManger.shareinstance.age = 20

上面就是swift传值的一些写法.