Swift中常用的四种传值方法:单例,单例,闭包(相当于OC的block传值),通知
1单例:
1>.创建单例变量 在AppDelegate.Swift中创建 var backgroundColor:UIColor?
2>.在页面A中创建单例的对象:
// 创建单例对象
func changeBlue() {
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.backgroundColor = UIColor.blueColor();
self.dismissViewControllerAnimated(true, completion: nil)
}
3>.在页面B中重写弗雷方法,并调用单例的变量完成数值的传递:
//重写父类方法,并且调用单例的变量完成数值的传递
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
self.view.backgroundColor = appDelegate.backgroundColor
2.代理
1>.页面A
//定义一个协议和方法
protocol GetMessageDelegate:NSObjectProtocol
{
// 回调方法 传入一个String类型的值
func getMessage(controller:AgentSecondVC,string:String)
}
声明delegate属性
var delegate:GetMessageDelegate?
设置代理方法:
func goBack() {
// 调用代理方法
if ((delegate) != nil) {
delegate?.getMessage(self, string:_textField!.text!)
self.navigationController?.popViewControllerAnimated(true)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
B页面:
// 接收传过来的值
func getMessage(controller: AgentSecondVC, string: String) {
_label.text = string
if string == ""
{
_label.text = "null"
}
}
}
3.闭包
1>.在A页面的视图控制器中声明一个闭包:
//定义闭包类型(特定的函数类型函数类型)
typealias InputClosureType = (String) ->Void
2>.
func clickBtn() {
// 创建闭包方法
if self.backClosure != nil
{
if let tempString = self.textField.text
{
self.backClosure!(tempString)
}
}
self.navigationController?.popViewControllerAnimated(true)
}
3>.在页面B中实现闭包的回调
func click() {
let closureSecondVC = ClosureSecondVC()
// 实现回调,获取回调的数据(闭包)
closureSecondVC.backClosure = {
(backStr:String)->Void in
self.showLabel.text = backStr
}
self.navigationController?.pushViewController(closureSecondVC, animated: true)
}
4.通知
1>.发送通知
let dict = ["name":"hello"]
NSNotificationCenter .defaultCenter().postNotificationName("NotificationIdentifier", object: dict, userInfo: dict)
self.navigationController?.popViewControllerAnimated(true)
2>.接受通知
// 接受通知
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(NotificationFristVC.getMyName(_:)), name: "NotificationIdentifier", object: nil)
3>.删除通知
// 删除通知
NSNotificationCenter.defaultCenter().removeObserver(self)
// 和上面的删除通知效果一样的
NSNotificationCenter.defaultCenter().removeObserver(self, name: "NotificationIdentifier", object: nil)
4>.获取通知的方法
func getMyName(notification:NSNotification)
{
// 获取词典中的值
let name = notification.object?.valueForKey("name") as? String
// 通知名称
let nameNotification = notification.name
// notification.userInfo 接收object 对象 一些信息 例如入键盘的一些信息
print(nameNotification)
print(name)
}
关于Swift的四种传值方法的具体代码请参考:https://github.com/wangningsai/Swift_ByVal/tree/master