1> 无形式参数的函数
//无形式参数
func sayHelloWorld() -> String {
return "hello world"
}
sayHelloWorld() //调用也需要带圆括号
2> 多形式参数的函数
//多形式参数
func addTwoNumbers(num1: Int, num2: Int) -> Int {
return num1 + num2
}
addTwoNumbers(num1: 1, num2: 2)
3> 无返回值的函数
func greet(person: String) {
print("hello, \(person)")
}
greet(person: "Lily")
4> 多返回值的函数
func minMax(array: [Int]) -> (min: Int, max: Int)? {
if array.isEmpty {
return nil
}
var minValue = array[0]
var maxValue = array[0]
for value in array {
if value < minValue {
minValue = value
} else if value > maxValue {
maxValue = value
}
}
return (minValue, maxValue)
}
if let array = minMax(array: [8, 101, -2, 10, 59]) {
print("min is \(array.min), max is \(array.max)")
}
5> 函数实际参数标签和形式参数名
//eat 为实际参数标签, food 为形式参数名
func eat(person: String, eat food: String) {
print("\(person) started eating an \(food)")
}
eat(person: "zhangsan", eat: "apple")
//省略实际参数标签
func someFunction(_ firstNum: Int, secondNum: Int) {
print("firstNum is \(firstNum),secondNum is \(secondNum)")
}
someFunction(1, secondNum: 2)
6> 默认形式参数值
//定义函数的时候给一个默认的值
func someFunction(defaultNum: Int = 10) {
print("num is \(defaultNum)")
}
someFunction(defaultNum: 6) //输出: 6
someFunction() //输出: 10
7> 可变形式参数
func sum(numbers: Int...) -> Int {
var sum = 0
for num in numbers {
sum += num
}
return sum
}
sum(numbers: 1, 2, 3, 4, 5)
8> 输入输出形式参数
//交换两个数
func swapTwoNumber(_ a: inout Int, _ b: inout Int = 20) {
let temporaryA = a
a = b
b = temporaryA
}
var num1 = 8
var num2 = 10
swap(&num1, &num2)
print("num1 is \(num1), num2 is \(num2)")
1> 函数类型
func addTwoNumber(num1: Int, num2: Int) -> Int {
return num1 + num2
}
var mathFunction: (Int, Int) -> Int = addTwoNumber(num1:num2:)
print(mathFunction(2, 3))
//添加实际参数标签和之前没有实际参数标签的使用是一样的
func addTwoNumber(first num1: Int, second num2: Int) -> Int {
return num1 + num2
}
let mathFunction2: (Int, Int) -> Int = addTwoNumber(first:second:)
print(mathFunction(1, 2))
3> 函数类型作为形式参数类型
func addTwoNumber(num1: Int, num2: Int) -> Int {
return num1 + num2
}
//函数类型作为形式参数类型
func result(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
print("result: \(mathFunction(a, b))")
}
result(addTwoNumber(num1:num2:), 2, 3)
4> 函数类型作为返回类型
//前进
func stepForward(_ input: Int) -> Int {
return input + 1
}
//后退
func stepBackWard(_ input: Int) -> Int {
return input - 1
}
func chooseStepFunction (backward: Bool) -> (Int) -> Int {
return backward ? stepBackWard : stepForward
}
var currentValue = -4
let moveNearerToZera = chooseStepFunction(backward: currentValue > 0)
print(moveNearerToZera)
while currentValue != 0 {
print("\(currentValue)...")
currentValue = moveNearerToZera(currentValue)
}
print("value is \(currentValue)")
5> 内嵌函数
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
//前进
func stepForward(_ input: Int) -> Int {
return input + 1
}
func stepBackward(_ input: Int) -> Int {
return input - 1
}
return backward ? stepBackward : stepForward
}
var currentValue = -4
let moveNearerToZera = chooseStepFunction(backward: currentValue > 0)
print(moveNearerToZera)
while currentValue != 0 {
print("\(currentValue)...")
currentValue = moveNearerToZera(currentValue)
}
print("value is \(currentValue)")