Swift学习笔记(五)·函数

172 阅读4分钟

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

定义:

 1. func creatBoy(name:String) -> Void {
       //所执行的代码块
       print(name)
    }
    解析: 1.func 为一段函数的必备开头
         2.creatBoy 为函数的名称,用于调用
         3.name 为入参名称
         4.Void 代表返回值为空,无返回值(也可为其他类型)
 2. 当返回值为空可简写为:
    func creatBoy(name:String){
       //所执行的代码块
       print(name)
    }

使用

    self.creatBoy(name: "浩然")
    creatBoy(name: "浩然")
    两者结果一样,后者是仅限在本类代码中调用

以下文章会以参数、返回值作为讲解重点

参数:

(1)参数数量:
  一个函数可以有单个参数多个参数或者无参数,单个参数定义上面已演示
  多个入参:
    func creatBoy(name:String,age:Int) -> Void {
       //所执行的代码块
       print(name)
    }
    代表该函数有nameage两个参数,多个参数写法就是在入参后面加上,
    调用时:creatBoy(name: "浩然",age:3)
  无入参
    func creatBoy() -> Void {
       //所执行的代码块
    }
(2)参数标签
   参数标签可以分为指定参数标签和隐式参数标签
   1.指定参数标签如:
    func creatBoy(name string:String,age:Int) -> Void {
       //所执行的代码块
       print(string)
    }
    调用:creatBoy(name: "浩然", age: 3) 输出为:浩然
   解析:在原有的参数前面加上一个名称,两者用空格隔开,在调用时入参名称为name,在函数代码块内部调用时,参数名称为string
   2.忽略参数标签如:
    func creatBoy(_ string:String,age:Int) -> Void {
       //所执行的代码块
       print(string)
    }
    调用:creatBoy("浩然", age: 3),输出为:浩然
   解析:在原有的参数前面加上一个"_",两者用空格隔开,在调用时无需显示入参名称,在函数代码块内部调用时,参数名称为string
(3)参数默认值:在书写函数时,一开始就可以对参数进行默认赋值,若在调用函数时该参数不传值,则在函数内部使用该参数的默认值,如:
    func creatBoy(_ string:String,age:Int = 3) -> Void {
       //所执行的代码块
       print("\(string),\(age)")
    }
    调用:creatBoy("浩然"),输出为:浩然,3
    调用:creatBoy("浩然",age=10),输出为:浩然,10
   解析:在调用时由于函数参数age有默认值,则可在调用时无需声明,若声明则函数内部使用声明值
(4)参数可为空标记:在书写函数时,可对参数后缀加"?",代表在调用函数时,该入参可为nil,如:
   func creatBoy(_ string:String,age:Int?) -> Void {
       //所执行的代码块
       print("\(string),\(age as Any)")
    }
   调用:creatBoy("浩然", age: nil),输出为:浩然,nil
(5)输入输出参数
  通常函数内的入参都是被当做常量,在函数内无法被修改,尝试修改的话会编译报错.
  如果你想在函数内修改该入参并且在函数执行完毕后依然保存,那么你可以将该入参修饰为"输入输出参数".如:
  var num = 2
  xiugai(num: &num)
  print(num)
  func xiugai(num: inout Int) -> Int {
        num = num + 2
        return num
  }
  打印结果为:4,说明num已在函数内部进行改变
  解析:函数内部改变入参,需要在参数类型前用"inout"进行修饰,并且在调用该函数时,入参需要用&进行修饰,且只能传入对象,不可直接赋值
  

返回值

函数可以返回任意类型的返回值,也可无返回值(无返回值上面已演示),下面演示有返回值的,如返回普通类型:String、Boold等:

   func creatBoy(_ string:String,age:Int) -> String {
        return String(format: "我的名字:%@,年龄:%ld", string,age)
   }
   调用: let str = creatBoy("浩然", age: 3)
        print(str)
   输出为:我的名字:浩然,年龄:3     

返回特殊类型:函数,又名嵌套函数,如:

   func creatBoyAge(age:Int) -> (Int)->Int {
        func addAge(ageNum:Int) -> Int {return ageNum+1}
        func reduceAge(ageNum:Int) -> Int {return ageNum-1}
        return age > 5 ? reduceAge : addAge
   }
   调用: var age = 10
        let changeAge = creatBoyAge(age: age)
        while age != 5 {
            print(age)
            age = changeAge(age)
        }
        print("结束")
    输出为:10 9 8 7 6 结束
    解析:在creatBoyAge定义时,返回值是:入参为Int,返回值为Int的函数