iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
自我挑戰組

初入Swift新手村的旅程系列 第 13

Day13 Swift 函數 Function - 1

  • 分享至 

  • xImage
  •  

Function 函數

函數建立與呼叫
建立一個函數用來判斷是否大於10,返回結果

func isMore(count: Int) -> Bool {
if count > 10 {
	return  true
}
else {
	return false
   }
}
// 進行函數的呼叫
isMore(count: 9)
// 返回false
isMore(count: 11)
// 返回true

無參數函數

func muFunc1() -> String {
	return "no String"
}
muFunc1()
// return noString

無返回值函數

如果函數不需要返回值,可以選擇返回Void空值,或是省略返回值的部分。

func myFunc2() -> Void {
	print("no Value")
}
func myFunc3(){
	print("no return")
}
myFunc2()
myFunc3()

原則上函數的返回值只會有一個,但在實際開發中,如果需要返回多個數值的話,會利用複合類型來處理,在Swift中可以利用元組的方式

func searchData(dataID: String) -> (succsee: Bool, data: String) {
// 模擬一個查詢結果與數據
let result = true
let data = "data"
	return (result,data)
}
if searchData(dataID: "1101").succsee {
	// 查詢成功
	print(searchData(dataID: "1101").data)
}

Swift函數還有一個技巧,開發者可以透過返回Optional的方式,來判斷是否成功。

// 返回Optional的值
func myFunc4(param: Int) -> Int? {
guard param > 20 else {
	return nil
	}
	return param - 20
}
if let tmp = myFunc4(param: 21) {
	print(tmp)
}
// 印出 1

函數的參數名

Swift的函數引入了參數內部命名與外部命名的概念,內部命名在函數實現時使用,外部命名在函數呼叫時使用。

多參數函數

func myFunc5(param1: Int, param2: Int, param3: Int) {
	// 這裡使用的param的參數的內部命名
	param1 + param2 + param3
}
myFunc5(param1: 3, param2: 3, param3: 3)
// 呼叫時的函數使用是外部命名

在建立函數的時候,可以在內部命名前面再添加一個名稱作為參數的外部命名。
// 為函數的參數添加外部命名
func myFunc6(out1 param1: Int, out2 param2: Int, out3 param3: Int) {
	param1 + param2 + param3
}
// 呼叫函數的時候,這時out為函數參數的外部命名。
myFunc6(out1: 4, out2: 4, out3: 5)

省略參數別名

開發者可以使用匿名標示符 _ 來對外部命名進行省略。

// 省略外部名稱的函數參數列表
func myFunc7(_ param1: Int, _ param2: Int) {
	param1 + param2
}
// 在呼叫時,不再標示參數名稱
myFunc7(2, 3)

參數初始值

在進行函數呼叫時,每個參數都必須傳值,這句話並不準確,應該是說每個參數都必須有值,除了在呼叫時為參數傳值外,Swift也支持設置初始值,需要注意的是,如果函數的某個參數設置了默認值,那麼開發者在呼叫函數的時候,可以選擇要不要傳這個值,但是各自參數的位置必須對應。

// 參數初始值為 10 與 5
func myFunc8(param1: Int, param2: Int = 10, param3: Int = 5) {
	param1 + param2 + param3
}
// 對每個參數都進行賦值
myFunc8(param1: 1, param2: 12, param3: 2)
// 只對沒有初始值的參數賦值
myFunc8(param1: 5)

func myFun9(param1: Int, param2: Int = 10, param3: Int) {
	param1 + param2 + param3
}
myFun9(param1: 10, param3: 20)

在開發中,有時開發者需要建立參數數量不定的函數,Swift也為此做了很好的支持。

// 參數數量不定的函數
func myFun10(param: Int...) {
var sum = 0
for count in param {
	sum += count
}
	print(sum)
}
// 傳遞參數的個數可以因應情況傳遞
myFun10(param: 1,2,3,5)
myFun10(param: 10,2,3)

上面所提到...,開發者所傳遞的值會被包裝成一個集合類型,所以傳遞的參數型別必須相同,但與此同時,也能傳遞多組數量可變的參數,不同參數之間的型別就可以之間的型別就可以有所不同。

func myFun11(param: Int..., param2: String){
var sum = 0
for count in param {
	sum += count
}
print("(param2):(param)")
}
myFun11(param: 1,3,4, param2: "Bang")

inout類型參數

在開發中如果需要在函數內部修改傳遞參數的變數的值,可以將此參數宣告為inout類型

func myFunc12(param: inout Int) {
	param += 1
}
var para = 10
myFunc12(param: &para)
print(para)

在傳遞參數時,需要使用 & ,這個符號將傳遞參數變數的內存位址。

接下來,是函數下半部的介紹


上一篇
Day12 Swift語法( 11 ) 流程跳轉
下一篇
Day14 Swift 函數 Function - 2
系列文
初入Swift新手村的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言