zoukankan      html  css  js  c++  java
  • Swift基础语法: 21

    1.可变形形参

    在Swift中, 有一个很有趣的参数定义方式, 那就是在类型名后添加 “( … )” 这个符号, 这种定义方法, 可以让我们在调用的时候随意传递任意数量的输入值, 比如:

    func arithmeticMean(numbers: Double...) -> Double {
        var total: Double = 0
        for number in numbers {
            total += number
        }
            return total / Double(numbers.count)
    }
    var a = arithmeticMean(1, 2, 3, 4, 5)
    println("a is (a)")
    // 打印出来的结果: a is 3.0
    
    var b = arithmeticMean(3, 8, 19)
    println("b is (b)")
    // 打印出来的结果: b is 10.0

    2.常量形参和变量形参

    函数的形参默认是常量。如果在函数体内修改该形参的数值, 编译器是会报错的, 那我们应该怎么做呢? 下面让我们来看看:

    func alignRight(var string: String, count: Int, pad: Character) -> String {
        let amountToPad = count - countElements(string)
        if amountToPad < 1{
            return string
        }
    
        let padString = String(pad)
    
        for _ in 1...amountToPad {
            string = padString + string
        }
        return string
    }
    let originalString = "hello"
    let paddedString = alignRight(originalString, 10, "-")
    
    println(paddedString)
    // 打印出来的结果: -----hello

    PS: 这里面所定义的函数alignRight是用来给字符串排序用的, 而例子中的排序是从左往右的排序, 每一个新加入的字符都会往左边添加, 而这个例子里面的形参 string 前面就加了 var, 这样子我们就可以一直更新字符串的排序.


    3.In-Out 形参

    变量形参有一定的局限性, 变量形参所做的改变不会比调用函数更持久,并且在函数体外是不可见的, 变量形参仅存在于函数调用的声明周期中, 如果要在函数调用结束后继续保持形参值的改变, 那么就要把形参改成In-Out形参, 比如:

    func swapTwoInts(inout a: Int, inout b: Int) {
        let temporaryA = a
        a = b
        b = temporaryA
    }
    
    var someInt = 3
    var anotherInt = 107
    
    swapTwoInts(&someInt, &anotherInt)
    
    println("someInt is now (someInt), and anotherInt is now (anotherInt )")
    // 打印出来的结果: someInt is now 107, and anotherInt is now 3

    PS: In-Out 参数不能有默认值, 可变参数的参数也不能被标记为 inout. 如果您标记参数为 inout, 它不能同时被标记为 var 或 let.

    如果我们只是简简单单的用了可变形参的话, 那么出来的结果就不是如此了, 比如:

    func swapTwoInts(inout a: Int, var b: Int) {
        let temporaryA = a
        a = b
        b = temporaryA
    }
    
    var someInt = 3
    var anotherInt = 107
    
    swapTwoInts(&someInt, anotherInt)
    
    println("someInt is now (someInt), and anotherInt is now (anotherInt )")
    // 打印出来的结果: someInt is now 107, and anotherInt is now 107

    PS: In-out 形参不同于从函数返回一个值, 上边 swapTwoInts 例子没有定义返回类型或者返回值, 但它仍然会修改 someInt 和 anotherInt 的值, 对函数来说, In-out 形 参是一个影响函数主体范围外的可选方式.


    好了, 这次我们就讲到这里, 下次我们继续~

  • 相关阅读:
    355. Design Twitter
    54. Spiral Matrix
    143. Reorder List
    324. Wiggle Sort II
    365. Water and Jug Problem
    洛谷 P3527 [POI2011]MET-Meteors 解题报告
    洛谷 P4592 [TJOI2018]异或 解题报告
    单调序列 解题报告
    洛谷 P4735 最大异或和 解题报告
    洛谷 P1527 [国家集训队]矩阵乘法 解题报告
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4529368.html
Copyright © 2011-2022 走看看