iOS Swift 使用closure 反向传值
上传说了正向传值, 那么自然就有反向传值咯, 不过apple并没有为我们封装类似于正向传值那样方便好用的方法, 也是因为方向传值并不是那么常见, 不过我觉得我们仍然还是需要掌握的, Swift中为我们提供了一个很好的特性, 就是闭包(closure), 使用闭包我们能很轻易的实现反向传值, 接下来跟着我一起做吧. go
新建一个Swift iOS 项目
老样子我们先新建一个single view application
参照这个就行了 http://huyaohui.com/2015/05/28/resignFirstResponder-close-keyboard/
新建一个ViewController
我们需要两个ViewController才能演示回传嘛, 对不, 一个的话不就是自己传给自己那还有什么好说的呢
其实在上次写的那个正向传值的基础上再在nextViewController上加上一个Button就就行了, 这样我们就能出发返回到上一个ViewController了
同样的需要新建一个Swift文件关联这个ViewController以控制这个ViewController
参考: iOS Swift 跳转传值
编写代码
闭包这个概念其实有点难懂的, 不过照着做就是了, 其实实际的应用场景不是很多的, 了解下就好
Viewcontroller.swift
直接看注释就行了, 就不解释了1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34import UIKit
class ViewController: UIViewController {
var changeLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// MARK: 数据回传函数
func someFunctionThatTakesAClosure(labelValue:String) -> Void {
changeLabel.text = labelValue
}
// 跳转监听
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var vc = segue.destinationViewController as! NextViewController
// 这里把对象的指针传到第二个ViewController中
// 在第二个ViewController中就可以间接控制这个对象了
vc.closure = someFunctionThatTakesAClosure
}
// 返回时监听的方法, modal跳转时需要用到这个方法才能返回的
func closed(segue: UIStoryboardSegue) {
println("已经返回了哦")
}
}
NextViewController.swift
1 | import UIKit |
modal跳转返回
当modal方式跳转的时候, 我们需要在你要返回的ViewController中定义一个返回的方法, 这样才能进行返回, 否则是无法返回的
然后再通过拉线拖到Exit上, 选择我们写的那个closed方法关上就行了
代码地址
总结
还是那句话场景并不是很多, 我所用到的也就只是反向传值而已, 其实也是比较简单的, 总共都 没有几行代码. 总的来说大概明白是怎么回事就好了