zoukankan      html  css  js  c++  java
  • 函数(swift)

    输入输出参数(In-Out Parameters)

    如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。

    定义一个输入输出参数时,在参数定义前加 inout 关键字。一个输入输出参数有传入函数的值,这个值被函数修改,然后被传出函数,替换原来的值。

    你只能将变量作为输入输出参数。你不能传入常量或者字面量(literal value),因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加&符,表示这个值可以被函数修改。

    注意: 输入输出参数不能有默认值,而且可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被 var 或者 let 标记。

    func swapTwoInts(inout a: Int, inout _ b: Int) {
        let temporaryA = a
        a = b
        b = temporaryA
    }
    

    这个 swapTwoInts(_:_:) 函数仅仅交换 a 与 b 的值。该函数先将 a 的值存到一个暂时常量temporaryA 中,然后将 b 的值赋给 a,最后将 temporaryA 幅值给 b

    你可以用两个 Int 型的变量来调用 swapTwoInts(_:_:)。需要注意的是,someInt 和 anotherInt 在传入 swapTwoInts(_:_:) 函数前,都加了 & 的前缀:

    var someInt = 3
    var anotherInt = 107
    swapTwoInts(&someInt, &anotherInt)
    print("someInt is now (someInt), and anotherInt is now (anotherInt)")
    // prints "someInt is now 107, and anotherInt is now 3"
    

     从上面这个例子中,我们可以看到 someInt 和 anotherInt 的原始值在 swapTwoInts(_:_:) 函数中被修改,尽管它们的定义在函数体外。

    注意: 输入输出参数和返回值是不一样的。上面的 swapTwoInts 函数并没有定义任何返回值,但仍然修改了 someInt 和 anotherInt 的值。输入输出参数是函数对函数体外产生影响的另一种方式。

    多重返回值函数(Functions with Multiple Return Values)

    你可以用元组(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([8, -6, 2, 109, 3, 71])
    print("min is (bounds.min) and max is (bounds.max)")
    // prints "min is -6 and max is 109"
    

    可选元组返回类型(Optional Tuple Return Types)

    为了安全的处理这个"空数组"问题,写一个minMax(_:)函数使用可选元组返回类型,并且当数组为空时返回nil:

    func minMax(array: [Int]) -> (min: Int, max: Int)? {
        if array.isEmpty { return nil }
        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)
    }
    

     你可以选择性的绑定当minMax(_:)函数返回的是一个实际的元组值还是nil

    if let bounds = minMax([8, -6, 2, 109, 3, 71]) {
        print("min is (bounds.min) and max is (bounds.max)")
    }
    // prints "min is -6 and max is 109"
    

    使用函数类型(Using Function Types)

    在 Swift 中,使用函数类型就像使用其他类型一样。例如,你可以定义一个类型为函数的常量或变量,并将函数赋值给它:

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

    这个可以读作:

    “定义一个叫做 mathFunction 的变量,类型是‘一个有两个 Int 型的参数并返回一个 Int 型的值的函数’,并让这个新变量指向 addTwoInts 函数”。

    print("Result: (mathFunction(2, 3))")
    // prints "Result: 5"
    

    函数类型作为参数类型(Function Types as Parameter Types)

    你可以用(Int, Int) -> Int这样的函数类型作为另一个函数的参数类型。这样你可以将函数的一部分实现交由给函数的调用者。

    下面是另一个例子,正如上面的函数一样,同样是输出某种数学运算结果:

    func printMathResult(mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
        print("Result: (mathFunction(a, b))")
    }
    printMathResult(addTwoInts, 3, 5)
    // prints "Result: 8"
    
  • 相关阅读:
    安卓权威编程指南-笔记(第24章 Looper Handler 和 HandlerThread)
    AndroidImageSlider
    ToolBar的使用
    安卓权威编程指南-笔记(第26章 服务的作用)
    关于两个update语句互相死锁的显现,加深我们对锁的了解 转载
    js 原型和构造方法 转载
    关于distinct 和group by的去重逻辑浅析
    tab 下一个
    当前浏览器版本
    清除li间隔
  • 原文地址:https://www.cnblogs.com/wlsxmhz/p/5996187.html
Copyright © 2011-2022 走看看