Swift 学习笔记

Swift -- 函数的定义与调用

2017-06-05  本文已影响535人  GY1994

1.函数的概念:完成某个特定任务的代码块,给代码块起一个合适的名字,即函数名,简单的说,当函数需要被执行的时候,调用这个名字就可以了。

2.Swift中函数定义的语法:
func 函数名 (参数名:参数类型) -> 函数返回值类型{
函数的实现代码
}

简单的函数实例:

无参数无返回值
func welcome(){
    print("欢迎");
}

调用方式welcome()

有参数有返回值
func Add(x : Int, y : Int) -> Int{
    return x + y;
}

可以这样调用Add(x: 10, y: 20);返回值即为30

函数带有默认值
func Add(x : Int,  y : Int = 2) -> Int{
    return x + y;
}

我们在调用的时候可以不传如y的值Add(x: 20),如果我们需要更改y的值,那么可以这样调用Add(x: 20, y: 3)

参数带有函数
func Add(x : Int, y : Int, method : (Int, Int) -> Int) -> Int{
    return method(x, y);
}
func NewAdd(x : Int, y : Int) -> Int{
    return x + y;
}

这个函数要求我们传入两个int类型的参数和一个带有两个int类型参数的函数。我们可以这样调用Add(x : 10, y : 20, method : NewAdd(x:y:))
在函数的执行过程中,Add函数会将它的两个参数传入到NewAdd函数中进行处理,最后,将处理的结果返回。

返回值为函数
func makeIncrementer() -> ((Int) -> Int){
    func addOne(number : Int) -> Int{
        return 1 + number;
    }
    return addOne;
}

函数是第一等类型,这意味着函数可以作为另一个函数的返回值。makeIncrementer方法返回一个函数。我们定义一个变量来接收返回的参数var increment = makeIncrementer() 并使用它increment(7)
我们也可以简单地书写makeIncrementer()(7)

函数的其他方形式:

函数的参数标签
func greets(_ person : String, on day : String) -> String{
    return "hello \(person), today is\(day)";
}

默认情况下,函数使用它们的参数名称作为参数的标签,在参数名称前可自己定义参数标签,或者使用_表示不使用参数标签,调用如下greets("GeYang", on: "Wednesday")

使用数组来让函数返回多个值
func calculateStatistics(scores : [Int]) -> (min : Int, max : Int, sum : Int){
    var min = scores[0];
    var max = scores[0];
    var sum = 0;
    for score in scores {
        if score > max{
            max = score;
        }else if score < min{
            min = score;
        }
        sum += score;
    }
    return(min, max, sum);
}

我们可以使用数组来让一个函数返回多个值,该数组的元素可以用名称或者数字来表示,我们定义一个常量来接收返回结果let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9]),获取值statistics.sum statistics.max,或者使用下标获取值statistics.2

可变参数的函数
func sumof(number : Int...) -> Int{
    var sum = 0;
    for num in number {
        sum += num;
    }
    return sum;
}

函数可以带可变个数的参数,这些参数在函数内表现为数组形式sumof(number: 1, 2, 3)sumof(number: 1, 2, 3, 4, 5)

带有inout关键字的参数
func swapTwoInts(_ a: inout Int, _ b : inout Int){
    let tempoaryA = a;
    a = b;
    b = tempoaryA;
}
var someInt = 3;
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt);

首先我们需要了解两个概念值类型引用类型值类型传递的是参数的一个副本,这样在调用参数的过程中不会影响原始数据。引用类型把参数本身引用(内存地址)传递过去,在调用的过程会影响原始数据。
在声明函数时,在参数前面用 inout修饰,函数内部实现改变外部参数。
所以,在执行完上述方法后,someInt的值为107,而anotherInt的值为3,相当于C语言中的地址传递

上一篇下一篇

猜你喜欢

热点阅读