美文网首页Swift
Swift - Functions

Swift - Functions

作者: ienos | 来源:发表于2018-06-15 10:28 被阅读159次

    定义和调用方法

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

    无参

    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

        本文链接:https://www.haomeiwen.com/subject/ovepeftx.html