• swift-func(函数)


    函数是一个组织在一起语句集合,以执行特定任务。

    Swift 函数类似于简单 C 函数以及复杂的 Objective C 语言函数。 它使我们能够通过函数调用内部的局部和全局参数值。 像其他任何语言一样 swift 函数也遵循相同的步骤。

    • 函数声明:它告诉编译器有关的函数的名称,返回类型和参数。

    • 函数定义:它提供函数的实际主体。

    Swift 函数包含参数类型和返回类型。

    函数定义

    在Swift 语言中函数是由 “func” 关键字来定义。当一个新定义函数时,它可能需要一个或几个值作为函数输入作为“参数” ,它将被处理在函数体中并传回值作为 '返回类型' 输出。

    每个函数都有一个函数名,它描述了函数将执行的任务。要使用函数,需要调用其名字函数,并通过它的输入值(称为参数)匹配函数的参数类型。函数参数也被称为“元组”

    函数的参数必须提供与函数参数列表的顺序相同,并返回一个值在 -> 之后。

    语法

    func funcname(Parameters) -> returntype
    {
       Statement1
       Statement2
        ---
       Statement N
       return parameters
    }

    e.g

    func student(name: String) -> String {
       return name
    }
    println(student("First Program"))
    println(student("About Functions"))

    print结果

    First Program
    About Functions

    带多个参数的函数

    func mult(no1: Int, no2: Int) -> Int {
       return no1*no2
    }
    println(mult(2,20))
    println(mult(3,15))
    println(mult(4,30))
    40
    45
    120

    函数也可用于返回字符串,整数和浮点数据类型值来作为返回类型。要找出数组函数 “ls” 的最大和最小的数,用large,small 整数数据类型声明。

    数组初始化为持有整数值。然后数组被处理并将数组中的每一个值读出并写其先前的值比较。当该值比前一个存储在“small”的参数更小,否则存储在 “large” 的参数值通过调用函数返回

    反悔多个参数

    func ls(array: [Int]) -> (large: Int, small: Int) {
       var lar = array[0]
       var sma = array[0]
       for i in array[1..<array.count] {
          if i < sma {
             sma = i
          } else if i > lar {
             lar = i
          }
       }
       return (lar, sma)
    }
    let num = ls([40,12,-5,78,98])
    println("Largest number is: (num.large) and smallest number is: (num.small)")
    Largest number is: 98 and smallest number is: -5

    返回 Optional  类型的函数

    Swift 推出 “optional” 特性以通过引入一个安全对策来消除问题。 例如,考虑我们声明函数值返回类型为整数,但当函数返回一个字符串值或任何一个零值,会怎么样? 在这种情况下,编译器会返回错误值。 “optional” 引入以摆脱这些问题。

    可选(Optional )功能将采取两种形式 'value' 和 'nil'。我们会提到 'Optionals' 使用键保留字符 “?” 检查元组是否返回一个值或零值。

    func minMax(array: [Int]) -> (min: Int, max: Int)? {
        if array.isEmpty { return nil }
        var currentMin = array[0]
        var currentMax = array[0]
        for value in array[1..<array.count] {
            if value < currentMin {
                currentMin = value
            } else if value > currentMax {
                currentMax = value
            }
        }
        return (currentMin, currentMax)
    }
    if let bounds = minMax([8, -6, 2, 109, 3, 71]) {
        println("min is (bounds.min) and max is (bounds.max)")
    }
    min is -6 and max is 109

    外部参数引导名称

    外部参数引导名称允许命名一个函数参数,使它们的目的更加明确。 命名两个函数的参数,然后调用该函数如下

    func pow(firstArg a: Int, secondArg b: Int) -> Int {
       var res = a
       for _ in 1..<b {
          res = res * a
       }
       println(res)
       return res
    }
    pow(firstArg:5, secondArg:3)

    当我们使用 playground 运行上面的程序,得到以下结果

    125

    参数可变型参数

    当我们想定义具有多个数量参数的函数, 那么我们可以声明成员为 “可变参数” 的参数。参数可以被指定为可变参数由(...)的参数名称之后。

    func vari<N>(members: N...){
       for i in members {
          println(i)
       }
    }
    vari(4,3,5)
    vari(4.5, 3.1, 5.6)
    vari("Swift", "Enumerations", "Closures")
    4
    3
    5
    4.5
    3.1
    5.6
    Swift
    Enumerations
    Closures

    函数默认情况下,考虑参数'常量',其中的用户也可以声明参数到函数作为变量。我们已经讨论过 'let' 关键字用来声明常量参数,可变参数的定义是使用 “var” 关键字。

    I/O参数在 Swift 中提供保留参数值的功能,即使其值在函数调用修改之后。在函数参数定义“inout”关键字的开始声明保留成员值。

    它源于关键字“inout”,因为它的值传递 'in' 到函数并且它的值被访问,并它的函数体修改,函数返回到“out” 来修改原来的参数。

    因为单靠它的值在里面,函数外部修改变量仅作为参数传递 in-out 参数。因此,没有必要声明字符串、文本作为 in-out 参数。 '&' 在之前变量名是指传递的参数。

    func temp(inout a1: Int, inout b1: Int) {
       let t = a1
       a1 = b1
       b1 = t
    }
    var no = 2
    var co = 10
    temp(&no, &co)
    println("Swapped values are (no), (co)")
    Swapped values are 10, 2

    嵌套函数

    嵌套函数通过调用内部函数来调用外部函数。

    func calcDecrement(forDecrement total: Int) -> () -> Int {//返回一个函数
       var overallDecrement = 0
       func decrementer() -> Int {
          overallDecrement -= total
          return overallDecrement//返回一个int类型的值
       }
       return decrementer
    }
    let decrem = calcDecrement(forDecrement: 30)
    println(decrem())
    -30
  • 相关阅读:
    Linux 共享库
    使用Visual Studio(VS)开发Qt程序代码提示功能的实现(转)
    ZOJ 3469 Food Delivery(区间DP)
    POJ 2955 Brackets (区间DP)
    HDU 3555 Bomb(数位DP)
    HDU 2089 不要62(数位DP)
    UESTC 1307 windy数(数位DP)
    HDU 4352 XHXJ's LIS(数位DP)
    POJ 3252 Round Numbers(数位DP)
    HDU 2476 String painter (区间DP)
  • 原文地址:https://www.cnblogs.com/liuShanPei1024/p/5350259.html
Copyright © 2020-2023  润新知