最終實(shí)例效果
Swift閉包的作用和OC中的block一致
1、保存代碼
2资铡、做耗時操作
<br />
1、閉包
定義閉包的方式
/*
{
() -> ()
in
code....
}
第一個括號代表:參數(shù)
第二個括號代表:返回值
in 用來表示這是一個閉包幢码,表示in后面的就是要執(zhí)行的代碼
*/
<br />
寫法
// 寫法一
let block = {
() -> ()
in
print("write Method One")
}
//下面這行表示調(diào)用
block()
// 寫法二
//如果在沒有參數(shù)笤休,沒有返回值的情況下,in之前蛤育,包括in都可以省略不寫
let block2 = {
print("write Method One")
}
//下面這行表示調(diào)用
block2()
<br />
閉包作為函數(shù)的參數(shù)的寫法
<br />
1宛官、 沒有參數(shù),沒有返回值
blockOne {
print("沒有參數(shù)瓦糕,沒有返回值")
}
func blockOne(block: () -> ()){
//調(diào)用下面的遇見底洗,才會執(zhí)行閉包內(nèi)的代碼
block()
}
<br />
2、 沒有參數(shù)咕娄,有返回值
blockTwo { () -> String in
return "我是返回的參數(shù)"
}
func blockTwo(block:() -> String){
print(block())
}
<br />
3亥揖、 有參數(shù),沒有返回值
blockThree { (name) in
print(name)
}
func blockThree(block :(name : String) -> ()){
block(name: "我的名字叫小明")
}
<br />
3圣勒、 有參數(shù)费变,有返回值
blockFour { (a, b) -> Int in
return a + b
}
func blockFour(block :(a : Int, b : Int) -> Int ){
print(block(a: 5, b: 6))
}
<br />
閉包作為屬性的寫法
<br />
1、直接寫
//沒有參數(shù)圣贸,沒有返回值
var bibao1 : (() -> ())?
//沒有參數(shù)挚歧,有返回值
var bibao2 : (() -> String)?
//有參數(shù),沒返回值
var bibao3 : ((age : Int) -> ())?
//有參數(shù)吁峻,有返回值
var bibao4 : ((a : Int , b : Int) -> Int)?
<br />
2滑负、寫法二
typealias imBlock = (view : UIView) -> ()
var im = imBlock?()
<br /><br />
實(shí)例:使用閉包創(chuàng)建一個ScrollView,并添加?xùn)|西
此方法可復(fù)用用含,以后創(chuàng)建ScrollView便可直接使用
func createScrollView (frame : CGRect,item : () -> Int , view : (num : Int) -> UIView) -> UIScrollView{
//定義ScrollView
let sc = UIScrollView(frame: frame)
//設(shè)置背景顏色
sc.backgroundColor = UIColor.purpleColor()
//通過一個沒有參數(shù)有返回值的block來得知要創(chuàng)建多少個View
let count = item()
//遍歷
for index in 0...(count - 1) {
//通過一個有參數(shù)有并且返回值為View的block把返回值添加到ScrollView中
sc.addSubview(view(num: index))
}
//通過獲取ScrollView的子控件矮慕,得到他的寬度,用來計算contentSize
let subView = sc.subviews.last
//如果獲取到子控件是空啄骇,直接返回scrollView
if subView == nil {
return sc
}
//設(shè)置contentSize
sc.contentSize = CGSize(width: (subView?.frame.width)! + (subView?.frame.origin.x)!, height:(subView?.frame.height)!)
//返回ScrollView
return sc
}
<br />
調(diào)用方法
//實(shí)例
let sc = createScrollView(CGRect(x: 0, y: 100, width: view.frame.width, height: 100), item: { () -> Int in
//返回要創(chuàng)建的個數(shù)
return 20
}) { (num) -> UIView in
//返回每一個View
let imageView = UIImageView(frame: CGRect(x: num * 90 , y: 10, width: 80, height: 80))
imageView.image = UIImage(named: "000.png")
return imageView
}
view.addSubview(sc)
<br />