美文网首页
Swift5.1 学习笔记(二)

Swift5.1 学习笔记(二)

作者: 程序猿在公元前 | 来源:发表于2020-02-16 16:51 被阅读0次

    函数

    • 定义
    // 有返回值
    func pi() -> Double {
        return 3.14
    }
    // 无返回值
    func a() -> () {
    }
    func a() -> void {
    }
    func a() {
    }
    // Void就是空元祖
    
    • 调用
    //型参只能是let
    func sum(v1: Int , v2: Int) -> Int {
    return v1+v2
    }
    // 需要声明形参
    sum(v1: 10, v2: 20)
    
    • 隐式返回
      如果整个函数体是一个单一表达式,那么函数会隐式返回这个表达式(不需要写return

    • 返回元祖
      可以实现多返回值

      • 函数的文档注释:
    /// 求和【概述】
    /// 
    /// 将2个整数相加【更详细的描述】
    /// - Parameter v1:xxx
    /// - Parameter v2:xxx
    /// - Returns: xxx
    /// - Note:xxxx【批注】
    
    • 参数标签
      可以修改参数标签

      func goToWork(at time:String) {
          xxx
      }
      goToWork(at: “8:00”)
      

      可以使用下划线_ 省略参数标签

      func sum(_ v1: Int, _ v2: Int) -> Int {
          v1 + v2
      }
      

      默认参数值

      func check(name: String =  “You”, age:Int, job:String = “none”) {
      xx
      }
      check(name:”I”,job”teacher”)
      //使用省略标签要避免出错
      
    • 可变参数

      func sum(_ numbers: Int...) -> Int {
          for number In numbers {
              }
      }
      // 一个函数最多只能有一个可变参数
      // 紧跟在可变参数后面的参数不能省略参数标签
      
    • 输入输出参数

      var number = 10
      func add(_ num: input Int) {
          num = 20
      }
      add(&number)
      // 可变参数不能使用inout
      // inout 不能有默认值
      // 本质是地址传递
      // 只能传入可以被多次赋值的多(字面量、let的都不行)
      // ps:官方内部有swap交换两个值的函数方法
      // 也可以使用元祖进行交换
      
    • 函数重载
      规则:
      1、函数名相同
      2、参数个数不同||参数类型不同||参数标签不同
      3、与返回值类型无关
      4、默认参数值和函数重载一起使用产生二义性时,编译器并不会报错(在c++会报错)
      5、可变参数、省略参数标签、函数重载在一起使用产生二义性时,编译器有可能报错

    • 内联函数
      如果开启优化模式(Build Settings - Swift compiler - Release)会将某些函数转成内联函数(函数过长、有递归调用、动态派发的函数就不会转变成内联)
      将函数调用展开函数体

    // 永远不会被内联(即使开启了编译器优化)
    @inline(never) func test () {
            xxx
    }
    
    // 开启编译器优化后,即使代码很长也会被内联(递归调用函数,动态派发除外)
    @inline(/__always) func test () {
            xxx
    }
    
    • 函数类型
      说明:每个函数都是有类型的,函数类型由型参类型、返回值类型组成。
      作用:定义变量(调用时不需要参数标签);作为函数参数;作为函数返回值(高阶函数)

      func hello(to somebody: String) -> String {
          return “Hello” + somebody
      }
      func bePolite(_ mathfn: (String) - > String, _ name: String) {
          print (“say: (mathfn(name))”);
      }
      
    • typealias
      用来给类型(元祖、函数等等)起别名

    • 嵌套函数
      将函数定义在函数内部

    相关文章

      网友评论

          本文标题:Swift5.1 学习笔记(二)

          本文链接:https://www.haomeiwen.com/subject/ieqmfhtx.html