Swift_闭包

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,希望跟大家一起学习这门艺术语言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值