swift文档笔记(六) -- 函数

1.多重返回值函数 


你可以用元组(tuple)类型让多个值作为一个复合值从函数中返回 

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

     var currentMin = array[0]

     var currentMax = array[0]

     for value in array[1..<array.count] {

         if value < currentMin {

             currentMin = value

         } else if value > currentMax {

             currentMax = value

}

  } 

     return (currentMin, currentMax)

 }

let bounds = minMax(array: [8, -6, 2, 109, 3, 71])

print("min is \(bounds.min) and max is \(bounds.max)")

// 打印 "min is -6 and max is 109" 




2.函数参数标签和参数名称 

每个函数参数都有一个参数标签( argument label )以及一个参数名称( parameter name )。参数标签在调用函 数的时候使用;调用的时候需要将函数的参数标签写在对应的参数前面。参数名称在函数的实现中使用。默认情况下,函数参数使用参数名称来作为它们的参数标签。


指定参数标签 

你可以在函数名称前指定它的参数标签,中间以空格分隔


func greet(person: String, from hometown: String) -> String {

    return "Hello \(person)!  Glad you could visit from \(hometown)."

} print(greet(person: "Bill", from: "Cupertino")) // 打印 "Hello Bill! Glad you could visit from Cupertino." 

忽略参数标签 

如果你不希望为某个参数添加一个标签,可以使用一个下划线( _ )来代替一个明确的参数标签。

func someFunction(_ firstParameterName: Int, secondParameterName: Int) { // 在函数体内,firstParameterName secondParameterName 代表参数中的第一个和第二个参数值 

}

someFunction(1, secondParameterName: 2)


默认参数值 

你可以在函数体中通过给参数赋值来为任意一个参数定义默认值(Deafult Value)。当默认值被定义后,调用这 个函数时可以忽略这个参数。 将不带有默认值的参数放在函数参数列表的最前,一般来说,没有默认值的参数更加的重要。

func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) { // 如果你在调用时候不传第二个参数,parameterWithDefault 会值为 12 传入到函数体中。 

 }

 someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) // parameterWithDefault = 6

 someFunction(parameterWithoutDefault: 4) // parameterWithDefault = 12



3.可变参数 

一个可变参数(variadic parameter)可以接受零个或多个值。函数调用时,你可以用可变参数来指定函数参数 可以被传入不确定数量的输入值。通过在变量类型名后面加入( ... )的方式来定义可变参数。一个函数最多只能拥有一个可变参数。

 func arithmeticMean(_ numbers: Double...) -> Double {

     var total: Double = 0

     for number in numbers {

         total += number

     }

     return total / Double(numbers.count)

 }

arithmeticMean(1, 2, 3, 4, 5) // 返回 3.0, 是这 5 个数的平均数。 arithmeticMean(3, 8.25, 18.75) // 返回 10.0, 是这 3 个数的平均数。 


4.输入输出参数 

函数参数默认是常量。试图在函数体中更改参数值将会导致编译错误(compile-time error)。如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那 么就应该把这个参数定义为输入输出参数(In-Out Parameters)。

在参数定义前加 inout 关键字,调用时在参数名前加&  

func swapTwoInts(_ a: inout Int, _ b: inout Int)

}

swapTwoInts(&someInt, &anotherInt)


5.函数类型 

每个函数都有特定的类型,由参数类型和返回值类型组成。

() -> Void ,叫“没有参数,并返回 Void 类型的函数”。 

(Int, Int) -> Int ,可以解读为“这个函数类型有两个 Int 型的参数并返回一个 Int 型的值。”。

可以用函数类型声明常量变量,也能把函数类型作入参和返回值。





6.嵌套函数 

到目前为止本章中你所见到的所有函数都叫全局函数(global functions),它们定义在全局域中。你也可以把 函数定义在别的函数体中,称作 嵌套函数(nested functions)。 

默认情况下,嵌套函数是对外界不可见的,但是可以被它们的外围函数(enclosing function)调用。一个外围 函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值