2020-03-22

關(guān)于函數(shù)的一些操作

回想一下java中方法的定義和調(diào)用

//java?:求和

public?int?add(int?a,int?b){

return??a+b;

}

add(10,15);

函數(shù)的定義

function:功能?作用?函數(shù)

func?函數(shù)名(參數(shù)名1:參數(shù)類型吐句,?參數(shù)名2:參數(shù)類型…)?->?返回值類型?{

函數(shù)體…

return?返回值

}

調(diào)用:?函數(shù)名(參數(shù)名:實參1,參數(shù)名:實參2)

//有參有返回值的函數(shù)

func?add(a:Int,b:Int)->Int{

let?sum?=?a?+?b

return?sum;

}

print(add(a:12,b:32))

常見的幾種函數(shù)類型

無參無返回值

func?test1()->Void{

print("這是一個無參無返回值的函數(shù)")

}

test1()

func?test2()->(){

print("這是一個無參無返回值的函數(shù)")

}

test2()

func?test3(){//最常用

print("這是一個無參無返回值的函數(shù)")

}

test3()

有參無返回值

func?call(phoneNumber:String){

print("給\(phoneNumber)打電話")

}

call(phoneNumber:"10001")

無參有返回值

func?getMsg()->String{

return?"這是一條來自10086的信息"

}

print(getMsg())

使用注意

1.函數(shù)的參數(shù)默認都是let類型

2.返回值返回多個:可以用元組或者數(shù)組等

//案例一

func?say(info:String){

info?=?"哈哈"

print("傳入的信息:\(info)")

}

say(info:"今天是星期四")

//思考:調(diào)用之后的輸出結(jié)果?報錯:info?作為一個常量

//案例二:定義一個函數(shù):找到數(shù)組里的最大值和最小值,然后返回

func?getMaxAndMin(array:[Int])->(Int,Int){

let?min?=?array.min()

let?max?=?array.max()

return?(min!,max!)

}

var?scores?=?[60,85,66,77]

let?result?=?getMaxAndMin(array:scores)

print("最低分:\(result.0),最高分:\(result.1)")

func?minMax(array:?[Int])?->?(min:?Int,?max:?Int)?{

var?currentMin?=?array[0]

var?currentMax?=?array[0]

for?value?in?array[1..

if?value?<?currentMin?{

currentMin?=?value

}?else?if?value?>?currentMax?{

currentMax?=?value

}

}

return?(currentMin,?currentMax)

}

let?bounds?=?minMax(array:?[5,?-6,?9,?109,?200,?71])

print("最小值為?\(bounds.min)?驳概,最大值為?\(bounds.max)")

內(nèi)部和外部參數(shù)名

總結(jié):

外部參數(shù)名是大名诚纸,外面人喊(調(diào)用的時候用);

內(nèi)部參數(shù)名是小名,家里人喊(函數(shù)體中使用)

func?minus1(a:Int,b:Int)->Int{

return?a?-?b

}

//num1是外部參數(shù)名大莫,a叫內(nèi)部參數(shù)名;num2是外部參數(shù)名,b叫內(nèi)部參數(shù)名;a,b在函數(shù)體中使用箍土,num1逢享、num2在調(diào)用的時候使用

func?minus2(num1?a:Int,num2?b:Int)->Int{

return?a?-?b

}

//_忽略外部參數(shù)名

func?minus3(_?a:Int,num2?b:Int)->Int{

return?a?-?b

}

minus1(a:10,b:3)

minus2(num1:10,num2:3)

minus3(10,num2:3)

默認參數(shù)

func?order(item:String?=?"奶茶")->String{

return?"您點了\(item)"

}

//調(diào)用時可以再次賦值,或者不處理

print(order(item:"面包"))

print(order())

//思考:我們之前學過了哪個函數(shù)吴藻,里面涉及了默認參數(shù)瞒爬?-print

print(1,2,3,4)

print(1,2,3,4,separator:"!",terminator:"?")

可變參數(shù)

使用場景:傳入的參數(shù)個數(shù)不確定的時候

通過在變量類型名后面加入(...)的方式來定義可變參數(shù)。

一個函數(shù)最多只能擁有一個可變參數(shù)沟堡。

需求:求2個Int型數(shù)的和

需求:求3個Int型數(shù)的和

想法:能不能設(shè)計一個函數(shù)侧但,求任意個數(shù)的和?也就是這個函數(shù)的參數(shù)個數(shù)是不確定的航罗。---》可變參數(shù)

func?add(nums:Int...)->Int{

//問題:如何使用nums這個可變參數(shù)禀横?

print(type(of:nums))//可變參數(shù)當成數(shù)組來處理

var?sum?=?0

for?i?in?nums{

sum?+=?i

}

return?sum

}

print(add(nums:10,20))

print(add(nums:10,20,30))

輸入輸出參數(shù)

引入:為什么需要輸入輸出參數(shù)

需求:定義一個swap函數(shù),交換a\b兩個參數(shù)的值粥血。

func?swap1(a:Int,b:Int){

let?tmp?=?a

a?=?b

b?=?tmp

print("a:\(a),b:\(b)")

}

swap1(a:10,b:30)

//代碼報錯:默認情況下參數(shù)都是let類型柏锄,你可以把值傳給他,不能改變

想要一個函數(shù)可以修改參數(shù)的值复亏,并且想要在這些修改在函數(shù)調(diào)用結(jié)束后仍然存在趾娃,那么就應(yīng)該把這個參數(shù)定義為輸入輸出參數(shù)(In-Out?Parameters)。

(1)定義一個輸入輸出參數(shù)時缔御,使用?inout?關(guān)鍵字

(2)只能傳遞變量給輸入輸出參數(shù)抬闷,傳入常量或者字面量。需要在參數(shù)名前加?&?符耕突,表示這個值可以被函數(shù)修改笤成。

func?swap2(a:inout?Int,b:inout?Int){

let?tmp?=?a

a?=?b

b?=?tmp

print("a:\(a),b:\(b)")

}

var?num1?=?10

var?num2?=?30

swap2(a:&num1,b:&num2)

print("num1:\(num1),num2:\(num2)")

函數(shù)類型

每個函數(shù)都有種特定的函數(shù)類型,函數(shù)的類型由函數(shù)的參數(shù)類型和返回類型組成眷茁。

func?add(a:Int,b:Int)->Int{

return?a+b

}

func?minus(a:Int,b:Int)->Int{

return?a-b

}

這兩個函數(shù)的類型是:?(Int,?Int)?->?Int炕泳,可以解讀為:“這個函數(shù)有兩個?Int?型的參數(shù)并返回一個?Int?型的值”。

func?printHelloWorld()?{

print("hello,?world")

}

printHelloWorld()函數(shù)的類型是:?()?->?Void上祈,或者叫“沒有參數(shù)喊崖,并返回?Void?類型的函數(shù)”

函數(shù)類型的使用

使用場景一:把一個函數(shù)給常量或變量

此時?Swift?可以自動推斷其函數(shù)類型

var?op?=?add?//Swift可以推斷出op是一個函數(shù),函數(shù)類型是(Int,?Int)?->?Int

print(op(10,30))//

op?=?minus

print(op(10,30))//minus(10,30)

使用場景二:函數(shù)作為參數(shù)

func?printResult(a:Int,b:Int,mathFunc:(Int,Int)->Int){

print(mathFunc(a,b))

}

printResult(a:10,b:20,mathFunc:add)

printResult(a:10,b:20,mathFunc:minus)

使用場景三:函數(shù)作為返回值

func?getFunction(a:Int)->(Int,Int)->Int{

if?a>10{

return?add

}else{

return?minus

}

}

print(getFunction(a:12)(10,20))

print(getFunction(a:4)(10,20))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雇逞,一起剝皮案震驚了整個濱河市荤懂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌塘砸,老刑警劉巖节仿,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異掉蔬,居然都是意外死亡廊宪,警方通過查閱死者的電腦和手機矾瘾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箭启,“玉大人壕翩,你說我怎么就攤上這事「倒眩” “怎么了放妈?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荐操。 經(jīng)常有香客問我芜抒,道長,這世上最難降的妖魔是什么托启? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任宅倒,我火速辦了婚禮,結(jié)果婚禮上屯耸,老公的妹妹穿的比我還像新娘拐迁。我一直安慰自己,他們只是感情好疗绣,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布线召。 她就那樣靜靜地躺著,像睡著了一般持痰。 火紅的嫁衣襯著肌膚如雪灶搜。 梳的紋絲不亂的頭發(fā)上祟蚀,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天工窍,我揣著相機與錄音,去河邊找鬼前酿。 笑死患雏,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的罢维。 我是一名探鬼主播淹仑,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肺孵!你這毒婦竟也來了匀借?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤平窘,失蹤者是張志新(化名)和其女友劉穎吓肋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑰艘,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡是鬼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年肤舞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片均蜜。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡李剖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出囤耳,到底是詐尸還是另有隱情篙顺,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布紫皇,位于F島的核電站慰安,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏聪铺。R本人自食惡果不足惜化焕,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铃剔。 院中可真熱鬧撒桨,春花似錦、人聲如沸键兜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽普气。三九已至谜疤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間现诀,已是汗流浹背夷磕。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仔沿,地道東北人坐桩。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像封锉,于是被迫代替她去往敵國和親绵跷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容