Swift之函数

Swift之函数

在这里插入图片描述

函数的简单说明

  • 函数是一段完成特定任务的独立代码片段。
  • 在定义一个函数时,有多个或者一个数据类型的值,作为函数的输入,成为参数
  • 在一定某个类型的值作为返回值的时候,成为返回类型
  • func作为前缀,指定函数的返回类型时,用返回箭头-> 后跟返回类型的名称的方式表示
//表示如下:
func 函数名(参数1:参数类型,参数2:参数类型,参数3:参数类型...) -> 返回值类型 {
    代码块
    return 返回值
}

常见的几种函数类型

  • 无参无返回值(有三种定义方式)
func test1()->Void{
   print("这是一个无参无返回值的函数")
}
test1()
//打印结果:这是一个无参无返回值的函数

func test2()->(){
   print("这是一个无参无返回值的函数")
}
test2()
//打印结果:这是一个无参无返回值的函数

func test3(){//最常用
   print("这是一个无参无返回值的函数")
}
test3()
//打印结果:这是一个无参无返回值的函数

//注意:严格上来说,虽然没有返回值被定义,hanshu() 函数依然返回了值。没有定义返回类型的函数会返回一 个特殊的 Void 值。它其实是一个空的元组(tuple),没有任何元素,可以写成()。
  • 有参无返回值
//name:参数名 String:参数类型
func personName(name:String) {
    
    print("我是\(name),哈哈");
}

personName(name: "CC");
//打印结果:我是CC,哈哈
  • 无参有返回值
func sayHello() ->String {
    
    return "hello 你好";
}

let hello = sayHello()
print(hello)
//打印结果: hello 你好

使用注意

1) 函数的参数默认是 let类型,不可以修改的,如果想要修改,必须使用inout关键字 就是后面说的 引用类型指针传递 2)返回值返回多个:可以用元组或者数组等

内部和外部参数名

总结: 外部参数名是大名,外面人喊(调用的时候用) 内部参数名是小名,家里人喊(函数体中使用)

func minus1(a:Int,b:Int)->Int{
    return a - b
}

//num1是外部参数名,a叫内部参数名;num2是外部参数名,b叫内部参数名;a,b在函数体中使用,num1、num2在调用的时候使用
func minus2(num1 a:Int,num2 b:Int)->Int{
    return a - b
}

//_忽略外部参数名
func minus3(_ a:Int,num2 b:Int)->Int{
    return a - b
}

minus1(a:10,b:3)
minus2(num1:10,num2:3)
minus3(10,num2:3)

默认参数

func makecoffee(type :String = "卡布奇诺") -> String {
    return "制作一杯\(type)咖啡。"
}
let coffee1 = makecoffee()
// 打印:"制作一杯卡布奇诺咖啡。
let coffee2 = makecoffee("拿铁")
// "制作一杯拿铁咖啡。"
可变参数
  • 使用场景:传入的参数个数不确定的时候
  • 它们必须具有相同的类型
  • 我们可以通过在参数类型名后面加入(…)的方式来指示这是可变参数
  • 一个函数最多只能拥有一个可变参数。
需求:求2Int型数的和
需求:求3Int型数的和
想法:能不能设计一个函数,求任意个数的和?也就是这个函数的参数个数是不确定的。---》可变参数

func add(nums:Int...)->Int{
    //问题:如何使用nums这个可变参数?
    print(type(of:nums))//可变参数当成数组来处理
    var sum = 0
    for i in nums{
        sum += i
    }
    return sum
}
print(add(nums:10,20))
print(add(nums:10,20,30))

输入输出参数

引入:为什么需要输入输出参数

需求:定义一个swap函数,交换a\b两个参数的值。
func swap1(a:Int,b:Int){
    let tmp = a
    a = b
    b = tmp
    print("a:\(a),b:\(b)")
}
swap1(a:10,b:30)
//代码报错:默认情况下参数都是let类型,你可以把值传给他,不能改变

如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。 (1)定义一个输入输出参数时,使用 inout 关键字 (2)只能传递变量给输入输出参数,不能传入常量或者字面量。因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加&符,表示这个值可以被函数修改。

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

func swap2(a:inout Int,b:inout Int){
    let tmp = a
    a = b
    b = tmp
    print("a:\(a),b:\(b)")
}
var num1 = 10
var num2 = 30
swap2(a:&num1,b:&num2)
print("num1:\(num1),num2:\(num2)")

函数类型

每个函数都有种特定的函数类型,函数的类型由函数的参数类型和返回类型组成。

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

func minus(a:Int,b:Int)->Int{
    return a-b
}

这两个函数的类型是: (Int, Int) -> Int,可以解读为:“这个函数有两个 Int 型的参数并返回一个 Int 型的值”。
下面是另一个例子,一个没有参数,也没有返回值的函数:

func printHelloWorld() {
    println("hello, world")
}

这个函数的类型是:() -> (),或者叫“没有参数,并返回 Void 类型的函数”。没有指定返回类型的函数总返回Void。在Swift中,Void 与空的元组是一样的。

函数类型的使用

使用场景一:把一个函数给常量或变量,此时 Swift 可以自动推断其函数类型

func add(a:Int,b:Int)->Int{
    return a+b
}
func minus(a:Int,b:Int)->Int{
    return a-b
}
var op = add //Swift可以推断出op是一个函数,函数类型是(Int, Int) -> Int
print(op(10,30))//打印结果:40
op = minus
print(op(10,30))//打印结果:-20

使用场景二:函数作为参数

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

func minus(a:Int,b:Int)->Int{
    return a-b
}
func printResult(a:Int,b:Int,mathFunc:(Int,Int)->Int){
    print(mathFunc(a,b))
}
printResult(a:10,b:20,mathFunc:add)//mathFunc:add调用上面定义的add函数
//打印结果:30
printResult(a:10,b:20,mathFunc:minus)//mathFunc:minus调用上面定义的minus函数
//打印结果:-10

使用场景三:函数作为返回值

func add(a:Int,b:Int)->Int{
    return a+b
}
func minus(a:Int,b:Int)->Int{
    return a-b
}
func getFunction(c:Int)->(Int,Int)->Int{
    if c>10{
        return add
    }else{
        return minus
    }
}
print(getFunction(c:12)(10,20))//c大于10返回add函数,然后把10,20分别赋值给add函数里的a和b
//打印结果:30
print(getFunction(c:4)(10,20))//c小于10返回minus函数,然后把10,20分别赋值给minus函数里的a和b
//打印结果:-10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值