swift 入門知識之函式與閉包

2021-09-08 11:25:55 字數 3906 閱讀 1256

1、swift中使用關鍵字func來宣告和定義乙個函式。呼叫函式使用它的名字加上小括號中的引數列表。

2、swift使用->方向符號分隔引數的名字和返回值型別

3、swift使用元組(tuple)來返回多個值

4、函式可以接收可變引數個數,手機到乙個陣列中

5、函式可以巢狀。內嵌函式可以訪問其定義的所在函式的變數。使用內嵌函式組織**,可以避免過長和過於複雜

6、函式是第一型別的,這意味著函式可以作為返回值返回

7、函式還可以作為另乙個函式的引數使用

8、閉包,閉包相當於乙個匿名函式(匿名函式做函式的引數),所有傳函式引數的地方都可以使用閉包

9、有時當你呼叫乙個函式將每個形參進行命名是非常有用的,以表明你把每個實參傳遞給函式的目的。此時,可以為引數設定外部形參名。

具體舉例如下:

定義乙個有引數的函式,返回值為int型函式,使用->型別來返回值

//

定義乙個有引數的函式

func sum(a:int,b:int)->int

//函式呼叫

sum(10, 20) //30

使用元組來返回多個值,通過元組名.0獲取第乙個值,剩下的值依次可以獲取

//

使用元組來返回多個值的函式

func getgasprices()->(double,double,double)

//函式呼叫

getgasprices() //(.0 1.0, .1 2.0, .2 3.0)

通過乙個型別...的方式定義可變引數的函式,引數個數根據你呼叫函式時傳遞的引數而定

//

定義可變引數的函式

func sumofarr(numbers:int...)->int

return

sum}

//函式呼叫

sumofarr(2,4,6,1,7,8) //28

在函式內部巢狀定義另乙個函式

//

函式內部巢狀定義函式

func returnfunc()->int

add()

returny}

//函式呼叫

returnfunc() //15

可以將函式作為乙個返回值返回

//

從函式內部函式返回乙個函式

func makeincrement()->(int->int)

return

addone}//

接收乙個返回的addone函式

var increment =makeincrement()

//呼叫這個返回的函式

increment(7) //8

函式可以作為引數使用

//

函式做引數使用

func search(array:[int],condition:int->bool)->bool

}return

false

}func equalten(num:int)->bool

var arr:[int] = [23,15,7,9,10

]//將equalten函式作為search函式的引數

search(arr, equalten) //true

閉包的使用,其實閉包就是乙個匿名的函式,它被當做引數傳遞給函式,類似objective-c中的block函式

//

閉包,閉包相當於乙個匿名函式(匿名函式做函式的引數)

//所有傳函式引數的地方都可以使用閉包

//例項一:number.map()是系統定義好的乙個閉包函式

var numbers = [2,4,5,1,6

]numbers.map()

//例項二:自定義的乙個閉包函式

func search2(arr:[int],condition:(int)->bool)->bool

}return

false

}var arr2 = [3,5,6,9,2

]search(arr2, )

引數外部名的使用:

興趣來了,給大家分享乙個超前的知識,使用swift建立乙個按鈕蠻好玩的

//

建立按鈕

var button:uibutton =uibutton(

frame: cgrectmake(

0, 0, 100, 100

))button.backgroundcolor =uicolor.redcolor()

button.settitle(

"open

", forstate:uicontrolstate.normal)

截圖:

函式形參名知識拓展:有時給引數設定乙個外部名,在呼叫函式時可以明確知道所傳引數的意思.避免含糊不清....

普通的引數名格式:

外部形參名格式:

使用外部形參名有很大的好處,可以很明確的表達函式的意思,避免含糊不清。例如:

//呼叫這個函式時,所傳的意思比較模糊:

//給它設定乙個外部名,傳引數時意思就一目了然了。

外部引數名稱速記

如果你想為乙個函式提供乙個外部形參名,然而本地形參名已經使用了乙個合適的名稱了,那你就不需要兩次書寫該形參的名稱。相反,你可以寫一次名字,並用乙個hash符號(#)作為名稱的字首。這就告訴swift使用名稱相同的本地行參名稱和外部形參名稱。

預設形參值

你可以為任何形參定義預設值以作為函式定義的一部分。如果已經定義了預設值,那麼呼叫函式時就可以省略該行參。

注意:請在函式形參列表的末尾放置帶預設值的形參。這將確保所有函式呼叫都使用順序相同的無預設值實參,並讓在每種情況下清晰地呼叫相同的函式。

有預設值的外部形參名

在大多數情況下,為所有形參提供乙個帶預設值的外部名是非常有用的(因此要求)。如果在呼叫函式的時候提供了乙個值,那麼這將確保形參對應的實參有著明確的目的。

為了使這個過程更容易,當你自己沒有提供外部名稱時,swift將為你定義的任何預設形參提供乙個自動外部名。這個自動外部名和本地名一樣,就像你已經在本地名前新增了hash符號(#)一樣。

006 swift 函式與閉包

main.swift 006 函式和閉包 created by liuan on 2020 3 22.import foundation 閉包 closures 是自包含的功能 塊,可以在 中使用或者用來作為引數傳值。和oc中的 塊 blocks i以及其他一些程式語言中的匿名函式比較相似 逃逸閉包...

Swift 基礎入門 協議 閉包

協議 protocol 當協議中有可選實現方法時 該協議前要用關鍵字 objc 修飾,可選實現方法前,用 optional 修飾 objc protocol marrydelegate 必須要實現的 protocol dividdelegate class man person marrydeleg...

Swift閉包與簡化

定義乙個陣列,使用sort函式對其排序 let names chris alex ewa barry daniella 完整形式 names.sort 尾隨閉包形式 names.sort 如果閉包表示式的引數型別已知,可省略 names.sort 如果閉包表示式的返回型別已知,可省略 names.s...