Swift程式設計七(函式)

2021-09-24 15:41:59 字數 2743 閱讀 2813

swift中的每個函式都有乙個型別,由函式的引數型別和返回型別組成。像swift中的任何其他型別一樣使用此型別,這使得將函式作為引數傳遞給其他函式以及從函式返回函式變得很容易。函式也可以在其他函式中編寫,以在巢狀函式範圍內封裝有用的功能。

略……每個函式引數都有引數標籤和引數名稱。呼叫函式時使用引數標籤; 每個引數都在函式呼叫時寫入,其前面帶有引數標籤。引數名稱用於函式的實現。預設情況下,引數使用其引數名稱作為其引數標籤。

所有引數必須具有唯一名稱。雖然多個引數可能具有相同的引數標籤,但唯一的引數標籤有助於使您的**更具可讀性。

引數名稱前面編寫引數標籤,用空格分隔:

func somefunc(argumentlabel argumentname: int) 

somefunc(argumentlabel: 1)

不想要引數的引數標籤,請為該引數編寫下劃線(_)而不是顯式引數標籤:

func otherfunc(_ argumentname1: int, argumentlabel2 argumentname2: int) 

otherfunc(1, argumentlabel2: 2)

在引數的型別之後為引數賦值來為函式中的任何引數定義預設值。如果定義了預設值,則可以在呼叫函式時省略該引數:

func defaultparameterfunc(argument1: int = 1, argument2: int) 

defaultparameterfunc(argument2: 3)

defaultparameterfunc(argument1: 2, argument2: 2)

變引數引數接受具有指定型別的零倍或更多的值。使用可變引數指定在呼叫函式時可以為引數傳遞不同數量的輸入值。通過在引數的型別名稱後面插入三個句點字元(…)來編寫可變引數。

可變引數的值在函式體內可用作適當型別的陣列。函式可以具有至多乙個可變引數。

func variadicparameterfunc(nums: int...) 

print("\(nums) 的和: \(sum)")

}variadicparameterfunc(nums: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

預設情況下,函式引數是常量。嘗試從該函式體內更改函式引數的值會導致編譯時錯誤。這意味著無法更改引數的值。

通過將inout關鍵字放在引數型別之前來編寫輸入輸出引數。乙個輸入輸出引數傳遞進函式的值,可以由函式修改並替換原來的值。

將變數作為輸入輸出引數的引數傳遞。不能傳遞常量或文字值作為引數,因為不能修改常量和文字。當使用輸入輸出引數呼叫函式時在變數的名稱前直接放置乙個&,以指示該函式可以修改它。

輸入輸出引數不能具有預設值,並且可變引數不能標記為inout。

func inoutfunc(argument1: inout int, argument2: inout int) 

var inout1 = 1

var inout2 = 2

inoutfunc(argument1: &inout1, argument2: &inout2)

print("inout1: \(inout1), inout2: \(inout2)")

每個函式都有乙個特定的函式型別,由函式的引數型別和返回型別組成。形式上表示為:(引數型別) -> 返回值型別。

像使用swift中的任何其他型別一樣使用函式型別。例如,可以將常量或變數定義為函式型別,並為該變數分配適當的函式:

func addints(nums: [int]) -> int 

}func multiplyints(nums: [int]) -> int )

}var mathfunc: ([int]) -> int = addints(nums:)

print(mathfunc([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))

mathfunc = multiplyints(nums:)

print(mathfunc([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))

可以使用函式型別,作為另乙個函式的引數型別。這使得可以為函式呼叫者保留函式實現的某些方面,以便在呼叫函式時提供:

func printmathresult(mathfunc: ([int]) -> int, nums: int...) 

printmathresult(mathfunc: mathfunc, nums: 1, 2, 3, 4, 5)

可以使用函式型別作為另乙個函式的返回型別。通過在返回函式的返回箭頭(->)之後立即編寫完整的函式型別來完成此操作:

func choosefunc(addints: bool) -> ([int]) -> int 

print(choosefunc(addints: true)([1, 2, 3, 4, 5]))

在函式體內定義的函式稱為巢狀函式,巢狀函式對外界是隱藏的,但它們的封閉函式仍然可以呼叫它們。封閉函式也可以返回其巢狀函式,以允許巢狀函式在另乙個範圍內使用:

func sumfunc() -> (int...) -> int 

}return sumints(nums:)

}print(sumfunc()(1, 2, 3, 4, 5))

iOS 開發 Swift 七 函式

func sum a int,b int int let result sum 10,b 20 格式 func 函式名 形參1 型別 預設值,形參2 型別 預設值.返回值 說明 包含預設值的函式可以不用傳遞,並且可以任意組合 格式 func 函式名 形參1 型別,形參2 型別.返回值 說明 可以忽略...

iOS開發Swift篇 (七)函式

一 函式的定義 1 函式的定義格式 1 func 函式名 形參列表 返回值型別 2 形參列表的格式 形參名1 形參型別1,形參名2 形參型別2,3 舉例 計算2個整數的和 1 func sum num1 int,num2 int int 4 沒有返回值的函式 如果函式沒有返回值,有3種寫法 1 fu...

swift之函式式程式設計

最近初學swift,和oc比,發現語言更現代,也有了更多的特性。如何寫好swift 也許,熟練使用新特性寫出更優秀的 就是答案。今天先從大的方向談談swift中的程式設計正規化 函式式程式設計。主要還是讀了大佬帖子,寫寫自己的理解。函式式程式設計 是一種 程式設計正規化 programming pa...