Swift - Functions

定义和调用方法

  • 可以定义一个或多个名字
  • 参数和返回值

无参

func sayHelloWorld() -> String {
    return "hello, world"
}

多个参数

func greet(person: String, alreadyGreeted: Bool) -> String {
    if alreadyGreeted {
        return "already greeted"
    }else{
        return "greet"
    }
}

无返回值

func greet(person: String) { // 省略 -> Void
    print("Hello, \(person)")
//    return () // 严格来讲,返回值是一个空的元祖
}

func greetTest() -> Void {
//    return ()
}

返回多个值

func minMax(array: [Int]) -> (min: Int, max: Int) {
    return (2, 4)
}
let bounds = minMax(array: [2, 4])
bounds.min // 访问元组中的值
bounds.max

参数标签和参数名

  • 多个参数可以有相同的参数标签
  • 默认参数名作为参数标签
  • 参数标签写在参数名前面,允许忽略 "_"
func someFunction(_ firstParameterName: Int, secondParamterName: Int) {
    
}
func otherFunction(firstArgumentLabel firstParamterName: Int, secondArgumentLabel secondParamterName: Int) {
    
}
otherFunction(firstArgumentLabel: 1, secondArgumentLabel: 2)
someFunction(1, secondParamterName: 2)

参数默认值

设置默认值时,调用时可以忽略该参数

func someFunctionDefault(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) {
    
}
someFunctionDefault(parameterWithoutDefault: 3, parameterWithDefault: 4)
someFunctionDefault(parameterWithoutDefault: 3)

多变参数 - 可以传 0 或者多个指定类型的值

一个函数最多可以有一个多变参数

func arithmeticMean(_ numbers: Double...) -> Double {
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total / Double(numbers.count)
}
arithmeticMean()

输入输出参数

  • 不能有默认值,多变参数不能标记 inout 关键字
  • 参数传进去方法默认是常量,使用inout 关键字(加在参数类型前面),必须传进去一个变量,不能是变量或字面量
  • 调用时会在变量前面加 &
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

var someInt = 3
var anotherInt = 107
swap(&someInt, &anotherInt)

使用方法类型

func addTwoInts(_ a: Int, _ b: Int) -> Int {
    return a + b
}

var mathFunction: (Int, Int) -> Int = addTwoInts
print("Result: \(mathFunction(2, 3))")

方法类型作为参数类型

func printMatchResult(_ matchFunction: (Int, Int) -> Int, _ a : Int, _ b: Int) {
    print("Result: \(matchFunction(a, b))")
}

printMatchResult(mathFunction, 2, 3)

方法类型作为返回值

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 = 3
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)

嵌套方法

func nestedChooseStepFunction(backward: Bool) -> (Int) -> Int {
    func stepForward(input: Int) -> Int { return input + 1 }
    func stepBackward(input: Int) -> Int { return input - 1 }
    return backward ? stepBackward : stepForward
}

你可能感兴趣的:(Swift - Functions)