swift之函數(shù)

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

//java :求和
public int add(int a,int b){ 
return a+b;
 } 
add(10,15); 

在Swift中函數(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:10,b:30)) 

常見的幾種函數(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 = [90,85,66,77]
 let result = getMaxAndMin(array:scores)
 print("最低分:\(result.0),最高分:\(result.1)") 

內(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容