Swift:函数与方法

本人录制技术视频地址:https://edu.csdn.net/lecturer/1899 欢迎观看。

在介绍Swift中的函数与方法之前,我们先看看objective-c中函数与方法的写法,以求两个数的和为例:

1. 函数写法

int sum(int a, int b) {
    return a + b;
}

2. 方法写法

- (int)sum:(int)a b:(int)b {
    return a + b;
}

从上面可以看出,两者的写法还是有很大不同的。而到了Swift中,直接将两者进行了统一,写法如下:

func sum(a: Int, b: Int) -> Int {
    return a + b;
}

因为两者进行了统一,所以下面的描述,我统一的称之为方法。


一、方法的定义格式

func 方法名(参数名称: 参数类型, ....) -> 返回值类型 {

}


二、方法的几种形态

1. 没有返回值的方法

func test(num1: Int) -> Void{
    
}

或者

func test(num1: Int) -> (){
    
}

或者

func test(num1: Int){

}

2. 没有形式参数的方法

func test() -> Int{
    return 0
}

3. 返回多个值的方法,即返回元组形式

func find(id: Int) -> (name: String, age: Int) {
    if id > 0 {
        return ("Jack", 20)
    } else {
        return ("Rose", 18)
    }
}

var person = find(2)
println("name=\(person.name)", age=\(person.age))

4. 可变参数列表(借鉴了C#中的params)

func sumOf(numbers: Int...) -> Int {
    var sum = 0
    for number in numbers {
        sum += number
    }
    
    return sum
}

//sumOf()  		结果为:0
//sumOf(1,2,3,4)	结果为:10

三、 形参的类型

1. 外部参数名(在形式参数前面再定义一个名称,这样调用方法的时候就有名称提示了)

func test(number1 num1:Int,number2 num2:Int) -> Int{
    return num1 + num2
}

test(number1: 3, number2: 5)

注意到,在参数num1和num2前面分别添加了名称number1和number2,这样在调用方法test的时候,系统会自动提示你将要输入的参数的提示名称。


2. 提示名称与形式参数名称一致,在形式参数前面加上#

func test(#num1:Int, #num2:Int) -> Int{
    return num1 + num2
}

test(num1: 3, num2: 6)


3. 默认参数值(即方法中的某个参数有默认值)

func addStudent(name: String, age: Int = 20){
    println("添加学生:name=\(name), age=\(age)")
}

从上面的例子可以看出,age这个形式参数有一个默认参数值20. 它的意思是,你调用方法的时候,如果传入age的值,则将覆盖掉20这个值;如果只传入name的值,则age的值就为20.

调用结果如下:

addStudent("Lifei")        // 添加学生:name=Lifei, age=20

addStudent("Jack", age: 30)  // 添加学生:name=Jack, age=30

从上面的调用形式可以看出,默认参数值的参数是外部参数名的形式,因为它出现了age这个提示语。


4. Swift中默认的方法形式参数是常量参数,不能修改

func test(num1: Int){

}

相当于

func test(let num1: Int){

}

如果想要参数是变量参数,需手动在形式参数名称加上var关键字,例如

func append(var destStr: String, sourceStr: String, num: Int) -> String{
    for _ in 0..<num{
        destStr += sourceStr
    }
    return destStr
}

var result = append("Lifei", "@", 6)

在变量destStr前面加了var修饰,这样在方法内部就可以使用destStr进行运算等操作了。


5. 输入输出参数,用inout关键字修饰

func change(inout num1: Int){
    num1 = 10
}

var a = 20
change(&a)
a
其实,它的原理就是传递的变量的地址,而不是值。 再举个例子,就是交换两个数的值。

func exchange(inout num1: Int,inout num2: Int){
    var temp = num1;
    num1 = num2;
    num2 = temp;
}

var a = 10
var b = 20
exchange(&a, &b)

四、方法类型

Swift中的方法类型也是数据类型的一种,例如:

func test(num1:Int, num2:Int) -> Int{
    return num1 + num2
}

这个方法的类型就是

(Int, Int) -> Int

可以利用方法类型来定义变量(fn这个变量的类型就是test的方法类型)

var fn:(Int, Int) -> Int = test
fn(10,20)

方法做为类型使用举例1:

func add(num1: Int,num2: Int) ->Int{
    return num1 + num2
}

func minus(num1: Int,num2: Int) ->Int{
    return num1 - num2
}

func divide(num1: Int,num2: Int) ->Int{
    return num1 / num2
}


func calcResult(fn: (Int,Int)->Int, num1: Int, num2: Int) -> Int{
    return fn(num1 , num2)
}

var addResult = calcResult(add, 10, 20)

var minusResult = calcResult(minus, 10, 20)

var divideResult = calcResult(divide, 100, 5)

可以看出,方法calcResult中的一个参数的类型就是(Int, Int) -> Int, 然后在调用的时候,就非常的方便了。


方法做为类型使用举例2:

func goToWork(){
    println("上班去")
}

func haveFun(){
    println("休息一下")
}

func howToDo(day: Int) -> Void -> Void{
    if(day == 6 || day == 7){
        return haveFun
    }else{
        return goToWork
    }
}

var fn = howToDo(1)
fn()

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋恨雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值