正向传值
正向传值应该是最简单的一种传值.在需要传值的地方,创建接受对象.
//接受传值对象
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传值的一些写法.