zoukankan      html  css  js  c++  java
  • iOS开发Swift篇—(八)函数(2)

    iOS开发Swift篇—(八)函数(2)

    一、函数类型

    函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是

    (形参类型列表) -> 返回值类型

    1 func sum(num1: Int, num2: Int) -> Int {
    2     return num1 + num2
    3 }

    sum函数的函数类型是(Int, Int) -> Int

    1 func printLine()
    2 {
    3     println("-----------")
    4 }

    printLine函数的函数类型有4种表示方法

    (1)Void -> Void 

    (2)() -> ()

    (3)Void -> ()

    (4)() -> Void

     

    二、利用函数类型定义变量

    可以利用函数类型来定义变量,将来可以存储这种类型的函数

    1 func sum(num1: Int, num2: Int) -> Int {
    2     return num1 + num2
    3 }
    4 var fn: (Int, Int) -> Int = sum
    5 fn(10, 20) // 返回30

    由于Swift有类型推断机制,因此,也可以这么写

      var fn = sum   // fn以后所存储函数的类型就必须是(Int, Int) -> Int

     

    三、函数作为参数

    跟其他数据类型一样,函数也能当函数的参数

    1 func printResult(fn: (Int, Int) -> Int, num1: Int, num2: Int) 
    2 {
    3     println("运算结果是:%d", fn(num1, num2))
    4 }

    fn参数接收一个函数,这个函数必须返回Int、有2个Int类型的参数

    复制代码
    1 func sum(num1: Int, num2: Int) -> Int {
    2     return num1 + num2
    3 }
    4 func minus(num1: Int, num2: Int) -> Int {
    5     return num1 - num2
    6 }
    7 printResult(sum, 20, 10) // 30
    8 printResult(minus, 20, 10) // 10
    复制代码

     

    四、函数作为返回值

    跟其他数据类型一样,函数也能当函数的返回值

    复制代码
     1 func goToWork() { println("去上班") }
     2 func playFootball() { println("踢足球") }
     3 func howToDo(day: Int) -> () -> () {
     4     if day < 6 {
     5         return goToWork
     6     } else {
     7         return playFootball
     8     }
     9 }
    10 var fn = howToDo(7)
    11 fn() 
    12 // 踢足球
    复制代码

     

    五、函数重载

    函数重载:函数名相同,函数类型不同

    下面的2个函数构成重载

    (1)函数名:sum,函数类型:(Int, Int) -> Int

    1 func sum(num1: Int, num2: Int) -> Int {
    2     return num1 + num2
    3 }

    (2)函数名:sum,函数类型:(Int, Int, Int) -> Int

    1 func sum(num1: Int, num2: Int, num3: Int) -> Int {
    2     return num1 + num2 + num3
    3 }

     

    六、嵌套函数

    全局函数:在全局作用域中定义的函数

    嵌套函数:在某个函数体中定义的函数

    代码示例:

    复制代码
     1 func howToDo(day: Int) -> () -> () {
     2     func goToWork() { println("去上班") }
     3     func playFootball() { println("踢足球") }
     4     if day < 6 {
     5         return goToWork
     6     } else { return playFootball }
     7 }
     8 var fn = howToDo(5)
     9 fn() // 去上班
    10 goToWork() 
    复制代码

     注意:第10行是错误写法,嵌套函数的作用域仅限于定义嵌套函数的函数体内部

  • 相关阅读:
    ffmpeg命令行获取RTSP流并每秒截取一张解码存储为jpg
    快速排序
    ffmpeg参数中文详细解释
    Docker
    elasticsearch的安装和配置
    C 语言-运算符(算术运算符,类型转换,赋值运算符,自增,自减,sizeof 运算符,逗号运算符,关系运算符,逻辑运算符,三目运算符)
    c语言-printf函数和scanf函数简单使用
    将JPA通用的实现方法封装成一个抽象类进行拓展
    工具类里的静态变量如何获取application.yml或者application.properties里的属性
    记java实体类属性名为全部为大写踩的坑(基础)
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5580312.html
Copyright © 2011-2022 走看看