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