Swift基礎(四) 閉包 列舉

2021-07-12 04:32:45 字數 3419 閱讀 9774

目錄:

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

print

(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

));

print

(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 巢狀函式是乙個有名字並可...