Swift函数简单使用

  • 1.函数官方简介
  • 2.函数简单定义
  • 无参无返回值:
  • 无参有返回值:
  • 有参无返回值:
  • 3.参数名(外部,内部)
  • 设置默认参数
  • 设置可变参数
  • 4.输入输出参数
  • 5.函数类型
  • 6.函数类型的使用
  • 1.Swift自动推断其函数类型
  • 2.函数作为参数
  • 3.函数作为返回值
  • 7.注意事项


1.函数官方简介

函数在Swift中是绝对重要的一环,所以我们一起来看看官方文档中是怎么来介绍Swift函数的:

函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的时候“调用”这个函数来完成它的任务。

Swift 统一的函数语法非常的灵活,可以用来表示任何函数,包括从最简单的没有参数名字的 C 风格函数,到复杂的带局部和外部参数名的
Objective-C
风格函数。参数可以提供默认值,以简化函数调用。参数也可以既当做传入参数,也当做传出参数,也就是说,一旦函数执行结束,传入的参数值将被修改。

在 Swift
中,每个函数都有一个由函数的参数值类型和返回值类型组成的类型。你可以把函数类型当做任何其他普通变量类型一样处理,这样就可以更简单地把函数当做别的函数的参数,也可以从其他函数中返回函数。函数的定义可以写在其他函数定义中,这样可以在嵌套函数范围内实现功能封装。

2.函数简单定义

Swift函数是以func作为前缀,指定函数的返回类型时,用返回箭头-> 后跟返回类型的名称的方式表示:

//大概模样
func 函数名(参数1:参数类型,参数2:参数类型...) -> 返回值类型 {
    代码块
    return 返回值
}

以及几种常见的几种函数类型:

无参无返回值:
//1
func f1()->Void{
   print("这是一个无参无返回值的函数")
}
//2
func f2()->(){
   print("这是一个无参无返回值的函数")
}
//最常用
//3
func f3(){
   print("这是一个无参无返回值的函数")
}

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

let hello = fanhui()
print(hello)
//打印结果: hello world
有参无返回值:
//参数名:name   参数类型:String
func LuName(name:String) {
    
    print("这里是\(name)广场!");
}

LuName(name: "卢本伟");
//打印结果:这里是卢本伟广场!

3.参数名(外部,内部)

在Swift中函数的参数名可区分外部和内部,外部参数名是在调用时赋值使用,内部参数名是在内部调用时使用。例如:外人喊你大名,而女朋友喊你小宝贝一样。更真实的是没有女朋友也可以
请看下面例子:

//没有女朋友的特殊情况
func Yang1(a:Int,b:Int)->Int{
    return a - b
}

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

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

Yang1(a:10,b:3)
Yang2(name1:10,name2:3)
Yang3(10,name2:3)
设置默认参数
func Yang(name:String = "小宝贝") -> String {
    return "你可以喊我\(name)~"
}
let baby = Yang()
// 输出结果:"你可以喊我小宝贝~"
let Husband = Yang("老公")
// 输出结果:"你可以喊我老公~"
设置可变参数

使用须知:

  • 使用场景:传入的参数个数不确定的时候
  • 它们必须具有相同的类型
  • 我们可以通过在参数类型名后面加入(…)的方式来指示这是可变参数
  • 一个函数最多只能拥有一个可变参数。
需求:求2个Int型数的和
需求:求3个Int型数的和
想法:能不能设计一个函数,求任意个数的和?也就是这个函数的参数个数是不确定的。---》可变参数

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))

4.输入输出参数

如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。

  • 定义一个输入输出参数时,使用 inout 关键字
  • 只能传递变量给输入输出参数,不能传入常量或者字面量。因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加&符,表示这个值可以被函数修改。
  • 注意: 输入输出参数不能有默认值,而且可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被var 或者 let 标记。
func swap(a:inout Int,b:inout Int){
    let tmp = a
    a = b
    b = tmp
    print("a:\(a),b:\(b)")
}
var num1 = 10
var num2 = 30
swap(a:&num1,b:&num2)
print("num1:\(num1),num2:\(num2)")

5.函数类型

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

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 型的值”。
例2:

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

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

6.函数类型的使用

1.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
2.函数作为参数
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
3.函数作为返回值
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

7.注意事项

  • 函数的参数默认是 let类型,不可以修改的,如果想要修改,必须使用inout关键字 就是后面说的 引用类型指针传递
  • 返回值返回多个:可以用元组或者数组等
  • 可选元组类型如(Int, Int)?与元组包含可选类型如(Int?, Int?)是不同的.可选的元组类型,整个元组是可选的,而不只是元组中的每个元素值。
  • 如果你提供了外部参数名,那么函数在被调用时,必须使用外部参数名。
  • 输入输出参数不能有默认值,而且可变参数不能用 inout 标记。

以上就是我所了解的Swift函数的内容啦,如有错误还请指出~

swift 函数嵌套 swift 函数调用_可变参数