ios入門10_閉包

閉包有點像c++裏面的表達式匿名函數之類的
1.字包含功能的代碼塊
類型
在這裏插入圖片描述
2.可以優化的地方
- 根據上下文推斷參數和返回值類型
- 從單行表達式中隱式返回(閉包只有一行代碼,可以省略return)
- 可以實用簡化參數名,如$0,$1(從0開始,表示第i 個參數)
- 尾隨閉包語法

3.閉包語法
(1) 接收參數並返回制定類型的閉包語法
{(parameters)->return type in
statements
}

//匿名函數
import Cocoa
let studname={print("swift 閉包")}
studname()//swift 閉包

(2) 閉包形式接收兩個參數並返回布爾值
{(int,int)->bool in
statement1
statement2

}

import Cocoa
let devide={(val1:int,val2:int)->int in
	return val1/val2
	}
	let result=devide(200,20)
	print(result)//10

4.閉包表達式
格式

1.
func fun(a:type)->void{
//函數主題
}
2.
fun({
//閉包主體
})
3.fun(){
//閉包主體
}


之前
sorted(by:)

import Cocoa
let names=["AT","AE","D","S","BE"]
func backwards(s1:string,s2:string)->bool{
	return s1>s2
}
var reversed=names.sorted(by:backwaeds)//c++一致
print(reversed)//["S","D","BE","AT","AE"]

之後

import Cocoa
let names=["AT","AE","D","S","BE"]
var reversed=names.sorted(by:{$0>$1})//$0 $1 $2調用閉包的參數
//var reversed=names.sorted(by:>})
print(reversed)

再後尾隨閉包

import Cocoa
let names=["AT","AE","D","S","BE"]
var reversed=names.sorted(){$0>$1}//$0 $1 $2調用閉包的參數
print(reversed)

5.捕獲值
閉包可以再其定義的上下文中捕獲常量或變量
嵌套函數也可以(之前遇到過)
即使定義這些常量和變量的原域已經不存在
捕獲了a和total,會在閉包內部存續,多次調用計數器會增加
把閉包賦給了兩個常量/變量,兩個值指向的都是一個閉包

import Cocoa
func cal(out_t total: Int) -> () -> Int {
   var a= 0
   func decrementer() -> Int {
      a+= total
      return a
   }
   return decrementer
}
let decrem = cal(out_t: 30)
print(decrem())//30
print(decrem())//60
print(decrem())//90
let alsedecrem=cal(out_t:30)
print(alsedecrem())//120
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章