當(dāng)你定義一個(gè)函數(shù)時(shí),你可以定義一個(gè)或多個(gè)有名字和類型的值,作為函數(shù)的輸入(稱為參數(shù),parameters),也可以定義某種類型的值作為函數(shù)執(zhí)行結(jié)束的輸出(稱為返回類型)。
每個(gè)函數(shù)有個(gè)函數(shù)名,用來描述函數(shù)執(zhí)行的任務(wù)。要使用一個(gè)函數(shù)時(shí),你用函數(shù)名“調(diào)用”,并傳給它匹配的輸入值(稱作實(shí)參,arguments)。一個(gè)函數(shù)的實(shí)參必須與函數(shù)參數(shù)表里參數(shù)的順序一致。
在下面例子中的函數(shù)叫做"greetingForPerson"
,之所以叫這個(gè)名字是因?yàn)檫@個(gè)函數(shù)用一個(gè)人的名字當(dāng)做輸入,并返回給這個(gè)人的問候語。為了完成這個(gè)任務(wù),你定義一個(gè)輸入?yún)?shù)-一個(gè)叫做 personName
的 String
值,和一個(gè)包含給這個(gè)人問候語的 String
類型的返回值:
func sayHello(personName: String) -> String {
let greeting = "Hello, " + personName + "!"
return greeting
}
所有的這些信息匯總起來成為函數(shù)的定義,并以 func
作為前綴。指定函數(shù)返回類型時(shí),用返回箭頭 ->
(一個(gè)連字符后跟一個(gè)右尖括號)后跟返回類型的名稱的方式來表示。
該定義描述了函數(shù)做什么,它期望接收什么和執(zhí)行結(jié)束時(shí)它返回的結(jié)果是什么。這樣的定義使的函數(shù)可以在別的地方以一種清晰的方式被調(diào)用:
println(sayHello("Anna"))
// prints "Hello, Anna!"
println(sayHello("Brian"))
// prints "Hello, Brian!"
調(diào)用 sayHello
函數(shù)時(shí),在圓括號中傳給它一個(gè) String
類型的實(shí)參。因?yàn)檫@個(gè)函數(shù)返回一個(gè) String
類型的值,sayHello
可以被包含在 println
的調(diào)用中,用來輸出這個(gè)函數(shù)的返回值,正如上面所示。
在 sayHello
的函數(shù)體中,先定義了一個(gè)新的名為 greeting
的 String
常量,同時(shí)賦值了給 personName
的一個(gè)簡單問候消息。然后用 return
關(guān)鍵字把這個(gè)問候返回出去。一旦 return greeting
被調(diào)用,該函數(shù)結(jié)束它的執(zhí)行并返回greeting
的當(dāng)前值。
你可以用不同的輸入值多次調(diào)用 sayHello
。上面的例子展示的是用"Anna"
和"Brian"
調(diào)用的結(jié)果,該函數(shù)分別返回了不同的結(jié)果。
為了簡化這個(gè)函數(shù)的定義,可以將問候消息的創(chuàng)建和返回寫成一句:
func sayHelloAgain(personName: String) -> String {
return "Hello again, " + personName + "!"
}
println(sayHelloAgain("Anna"))
// prints "Hello again, Anna!"