目錄:
1.閉包
閉包語法規則,閉包簡化,尾隨閉包,捕獲值,閉包是引用型別,非逃逸閉包,自動閉包
2.列舉
switch窮舉列舉,列舉關聯值,列舉的原始值,遞迴列舉
//1.
閉包/*
閉包的語法規則
*/var
vararray = [
"aaaa"
,"gggg"
,"bbbb"
,"uuuu"
];let
varret =
vararray
.sort
();varret;//
排序完成的結果:
["uuuu", "gggg", "bbbb", "aaaa"]
//閉包簡化
letvarret2 =
vararray
.sort
();let
varret3 =
vararray
.sort
();let
varret4 =
vararray
.sort
();let
varret5 =
vararray
.sort
(>); //
尾隨閉包
/*如果您需要將乙個很長的閉包表示式作為最後乙個引數傳遞給函式
,可以使用尾隨閉包來增強函式的可讀性。尾
隨閉包是乙個書寫在函式括號之後的閉包表示式
,函式支援將其作為最後乙個引數呼叫.*/
//將上面排序的閉包改為尾隨閉包:
letvarret6 =
vararray
.sort
() //
如果函式只需要閉包表示式乙個引數
,當您使用尾隨閉包時
,您甚至可以把
()省略掉
:let
varret7 =
vararray
.sort //
捕獲值func
makeincrementor(forincrement amount:
int) -> () ->
int//
返回值是乙個函式型別
return
incrementor
}let
makeincrementorbyeight =
makeincrementor
(forincrement:8);
makeincrementorbyeight
();//返回8
makeincrementorbyeight
();//
返回16 //
閉包是引用型別
//非逃逸閉包
//自動閉包
//2.
列舉enum
direction ;
// north , south , east
和west
不會被隱式地賦值為
0 , 1 , 2和3
。相反,
這些列舉成員本身
就是完備的值
.let
letvalenum =
direction
.north
;switch
(letvalenum
)//swith
窮舉列舉
//列舉關聯值
enum
barcode
/*以上**可以這麼理解:「
定義乙個名為
barcode
的列舉型別
,它的乙個成員值是具有
(int,int,int,int)
型別關聯值的
upca ,
另乙個成員值是具有
string
型別關聯值的
qrcode。」
*/var
productbarcode =
barcode
.upca(8
,85909
,51226,3
);productbarcode
= .qrcode
("abcdefghijklmnop"
);switch
productbarcode
// 輸出
"qr code: abcdefghijklmnop." //
列舉,原始值
enum
asciicontrolcharacter:
character
/*列舉型別
asciicontrolcharacter
的原始值型別被定義為
character ,
並設定了一些比較常見的
ascii
控制字元。
*///
原始值的隱式賦值
enum
planet:
intprint
(planet
.venus
.rawvalue
);//venus
隱式賦值為2,
.rawvalue
可輸出原始值
enum
compasspoint:
string
(compasspoint
.south
.rawvalue
);//south
隱式賦值為
「south」
,.rawvalue
可輸出原始值
//通過原始值來訪問初始化列舉項
letpositiontofind =5if
letsomeplanet =
planet
(rawvalue:
positiontofind)}
else
//遞迴列舉
indirect
enum arithmeticexpression
func evaluate(expression: arithmeticexpression) -> int }
// 計算 (5 + 4) * 2
letfive = arithmeticexpression.
number(5
); letfour = arithmeticexpression.
number(4
); letsum = arithmeticexpression.
addition
(five,four);
letproduct = arithmeticexpression.
multiplication
(sum,arithmeticexpression.
number(2
));
(evaluate
(product
));//輸出 "18"
Swift基礎 閉包
閉包是自包含的函式 塊,可以在在 中被傳遞和使用。閉包能捕獲和儲存騎在上下文中任意常量和變數的引用。這就是所謂的閉合幷包裹著這些常量和變數,俗稱閉包。swift會為我們管理在捕獲過程中設計的所有記憶體操作。閉包表示式式一種利用簡潔語法構建內聯的方式 2.1 sorted函式 swift標準庫提供了s...
Swift 基礎入門 協議 閉包
協議 protocol 當協議中有可選實現方法時 該協議前要用關鍵字 objc 修飾,可選實現方法前,用 optional 修飾 objc protocol marrydelegate 必須要實現的 protocol dividdelegate class man person marrydeleg...
Swift程式設計基礎(五) 閉包
閉包是自包含的函式 塊,可以在 中使用或者用來作為引數傳值。swift中的閉包和oc中的blocks比較相似。閉包可以捕獲和儲存所在上下文中任意常量和變數的引用。這就是閉合幷包裹著這些常量和變數,俗稱閉包。閉包有三種形式 1 全域性函式是乙個有名字但不會捕獲任何值的閉包 2 巢狀函式是乙個有名字並可...