閉包有點像c++裡面的表示式匿名函式之類的
1.字包含功能的**塊
型別
2.可以優化的地方
-根據上下文推斷引數和返回值型別
-從單行表示式中隱式返回(閉包只有一行**,可以省略return)
-可以實用簡化引數名,如$0,$1(從0開始,表示第i 個引數)
-尾隨閉包語法
3.閉包語法
(1) 接收引數並返回制定型別的閉包語法
//匿名函式
import cocoa
let studname=
studname()//swift 閉包
(2) 閉包形式接收兩個引數並返回布林值
import cocoa
let devide=
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
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 $2呼叫閉包的引數
//var reversed=names.sorted(by:>})
print(reversed)
再後尾隨閉包
import cocoa
let names=["at","ae","d","s","be"]
var reversed=names.sorted()//$0 $1 $2呼叫閉包的引數
print(reversed)
5.捕獲值
閉包可以再其定義的上下文中捕獲常量或變數
巢狀函式也可以(之前遇到過)
即使定義這些常量和變數的原域已經不存在
捕獲了a和total,會在閉包內部存續,多次呼叫計數器會增加
把閉包賦給了兩個常量/變數,兩個值指向的都是乙個閉包
import cocoa
func cal(out_t total: int) -> () -> int
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
Python基礎10 閉包
內層函式引用了外層函式的變數 引數也算變數 然後返回內層函式的情況,稱為閉包 closure def calc sum lst deflazy sum return sum lst return lazy sumdef lazy sum args defsum ax 0 for n in args ...
rust 函式 和 閉包 10
目錄 一,函式 一 函式的宣告格式 二 用函式實現兩數交換值 二,閉包 一 閉包的宣告格式 二 使用閉包實現兩數交換值 三,異同 一 作用域不同 二 三個特性 所有權,可變借用和不可變借用 一致 1,所有權 2,借用 3,可變借用 mut修飾符在變數名前,函式定義時形式引數必須宣告型別,這是出於安全...
Swift 基礎入門 協議 閉包
協議 protocol 當協議中有可選實現方法時 該協議前要用關鍵字 objc 修飾,可選實現方法前,用 optional 修飾 objc protocol marrydelegate 必須要實現的 protocol dividdelegate class man person marrydeleg...