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,希望跟大家一起学习这门艺术语言。
相关文章推荐
- Swift4.0 学习笔记 第十四节: 闭包的定义
- Swift学习笔记之闭包
- swift--闭包
- swift 之循环语句和闭包
- Swift学习:2.7 闭包
- Swift中使用typealias定义一个闭包closure
- Swift中的闭包
- Swift 闭包
- Swift 第五课 闭包
- Swift 基础学习(闭包)
- Swift的函数与函数指针、闭包Closure等相关内容介绍
- Swift学习-闭包(七)
- swift的函数与闭包
- Swift - 闭包的介绍及用法
- swift中解决闭包循环引用的几种方式
- swift闭包的理解
- Swift闭包的简化写法——强大的Swift闭包
- 苹果新的编程语言 Swift 语言进阶(六)--函数和闭包
- Swift 中的闭包
- Swift2-0基础_Closures(闭包)