您的位置:首页 > 移动开发 > Swift

Swift_闭包

2015-07-16 15:00 393 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iOS_And_Swift/article/details/46912033

1.第一种写法

func lessThanTen(list:[Int], match:(number:Int)->Bool) -> Bool{
for var i = 0 ;i < list.count ; i++ {
var item = list[i]
if match (number: item){
if  item < 10 {
return true
}
}
}
return false
}
func match(number:Int) -> Bool {
if number%2 == 1 {
return true
}
return false
}
//调用的时候
lessThanTen([0,2,4,6,8,10], match: match)//match相当于直接调用的match函数

2.第二种写法

//这是正常写法in后边是函数体就是实现部分
var result = ViewController.lessThanTen([0,1,2,3,4,5,6,7,8,9], match: { (number) -> Bool in
if number%2 == 0 {
return true
}
return false
})

//在写in 后边的code的时候现在还没有对参数的提示,只要写number就行了。这是一行实现不用return 也行。
var result = lessThanTen([0,1,2,3,4,5,6,7,8,9], match: { (number) -> Bool in number%2 == 0 })

3.闭包可以理解成将一个函数A嵌套在一个函数B中执行,但是可以直接带B中使用A,但是至于A的实现代码,B并不关心。有点想Object-c中的Block语句块

4.在实际中可以这么使用,比如先自己定义一个闭包,当事件触发的时候调用闭包B,那么在其他class中就可以直接调用B,然后根据需要自己实现B的代码。

比如:

//ViewController
import UIKit
//like oc里面的typedef  定义的block
typealias sendClosure = (sender:Int)-> Void

class ViewController: UIViewController {

var closure :sendClosure?//可选值 有可能是nil

override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.whiteColor()
var button = UIButton (frame: CGRect (x: 100, y: 100, width: 100, height: 40))
self.view.addSubview(button)
button.setTitle("button", forState: UIControlState.Normal)
button.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
button .addTarget(self, action: "ClickButton:", forControlEvents: UIControlEvents.TouchUpInside)
}

func setClickButtonEvent(sender:(tag:Int)->Void){
self.closure = sender//给自己的函数指针赋值
}
@IBAction func ClickButton(sender: UIButton) {
if (closure != nil) {//button点击事件执行函数指针
closure!(sender: sender.tag)
}
}
}

----------

//SecondVC
import UIKit

class SecondVC: UIViewController {

@IBAction func Click(sender: UIButton) {
var vc = ViewController()
vc.setClickButtonEvent { (tag) -> Void in
println("输出来了tag值 is \(tag)")
}//push之前给VC的函数指针赋值,让那个指针指向这个代码块
self.navigationController?.pushViewController(vc, animated: true)//push页面

}
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.whiteColor()
var button = UIButton (frame: CGRect (x: 100, y: 100, width: 100, height: 40))
self.view.addSubview(button)
button.setTitle("123", forState: UIControlState.Normal)
button.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
button .addTarget(self, action: "Click:", forControlEvents: UIControlEvents.TouchUpInside)
}
}

Demo下载地址
因为是初次接触Swift,希望跟大家一起学习这门艺术语言。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: