zoukankan      html  css  js  c++  java
  • Swift6-函数

    函数定义和调用、函数参数与返回值、函数参数标签和参数名称、函数类型、嵌套函数。

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

    参数可以提供默认值。

    Swift中每个函数都有一个由函数的参数值类型和返回值类型组成的类型。

    函数的定义与调用:

    定义一个函数时,可以定义一个或多个有名字和类型的值,作为函数的输入,称为参数,也可以定义某种类型的值作为函数执行结束时的输出,称为返回类型。

    funcname(label paraname:type,....)->returntype{

      statement

      ..

    }

    函数参数与返回值:

    函数参数与返回值在Swift中非常灵活。可以定义任何类型的函数,包括从只带一个未名参数的简单函数到复杂的带有表达性参数名和不同参数选项的复杂函数。

    无参数函数:

    没有参数。

    多参数函数:

    func greet(Person:String, alread:Bool) -> String{...}

    无返回值函数:

    func greet(person:String){...}  //严格来说,没有定义返回类型的函数会返回一个特殊的void值,它其实是一个空的元组tuple,没有任何元素()。

    多重返回值函数:

    可以用元组tuple类型让多个值作为一个复合值从函数中返回。

    func minMax(array:[Int]) -> (min:Int, max:Int){...}  //返回一个元组,指定返回值的各个名称和类型。

    元组元素访问:let a=minMax(array:[1,2,3,4]); print(a.min, a.max)

    元组的成员不需要在元组从函数中返回时命名,因为它们的名字已经在函数返回类型中指定了。

    可选元组返回类型:

    如果函数返回的元组类型有可能整个元组都“没有值”,可以使用可选的(optional)元组返回类型反应整个元组可以是nil的事实。可以通过在元组类型的右括号后放置一个问好来定义一个可选元组:

    如 (Int,Int)?

    注意:可选元组(Int,Int)?与(Int?,Int?)是不同的,前者标识整个元组是可选的,后者标识元组中元素是可选的。

    可选量可直接赋值nil。

    函数参数标签和参数名称:

    每个函数都有一个参数标签以及一个参数名称。

    参数标签在调用函数的时候使用;调用的时候将参数标签写在实参前面并加冒号:。参数标签的顺序应与函数形参声明一致。

    参数名称在函数的实现中使用。

    默认情况下,函数参数使用参数名称作为参数标签。

    所有的参数都必须有一个独一无二的名字,虽然多个参数拥有同样的参数标签是可能的,但是一个唯一的函数标签可读性好。

    忽略参数标签:

    可以使用一个下划线(_)来代替一个明确的参数标签。

    如果一个参数有一个标签,那么在调用的时候必须使用标签来标记这个参数。

    默认参数值:

    可以在函数体中通过给参数赋值来为任意一个参数定义默认值。当默认值被定义后,调用这个函数可以忽略这个参数。

    func somFunc(lab1 para1:Int = 12){..}  //默认参数值为12

    将不带有默认值的参数放在函数参数列表的最前。

    可变参数:

    一个可变参数可以接受零个或多个值。函数调用时,可以用可变参数来指定函数参数可以被传入不确定数量的输入值。通过在变量类型后面加入(...)的方式来定义可变参数。

    func someFunc(_ member:Double...){...}

    上面函数相当于声明了一个Double类型数组作为参数。

    输入输出参数:

    函数参数默认是常量。

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

    定义一个输入输出参数时,在参数定义前加inout关键字。一个输入输出参数有传入函数的值,这个值被函数修改,然后被传出函数,替换原来的值。

    只能传递变量给输入输出参数,不能传入常量或字面量,因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数名前加&符,表示这个值可以被函数修改。

    输入输出参数不能有默认值。而且可变参数不能用inout标记。

    func someFunc(_ para:inout Int){...}

    var a:Int=9

    someFunc(&a)

    函数类型:

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

    使用函数类型:

    (可以像C++函数指针一样将函数类型作为变量类型,将函数赋给某个同类型的变量)

    func addTwoInts(_ para1:Int,_ para2:Int)->Int{...}

    var mathFunc:(Int,Int)->Int=addTwoInts

    mathFunc(2,3)

    函数类型作为参数类型:

    func printMathResult(_ mathF:(Int,Int)->Int){...}

    函数类型作为返回类型:

    可以用函数类型作为另一个函数的返回类型。

    在->后写一个完整的函数类型。

    func name()->(Int,Int)->Int{...}

    嵌套函数:

    一般函数是全局函数,嵌套函数是嵌套在其它函数内部的函数。

    嵌套函数作为域是它的外层函数体内。可作为返回值使用或在外层函数体内调用。

  • 相关阅读:
    装饰器模式(Decorator)
    原语:从0到1,从硬件指令集到OS原语,锁原语的哲学
    从Oop-Klass模型看透反射
    从三数之和看如何优化算法,递推-->递推加二分查找-->递推加滑尺
    单例模式-静态内部类实现及原理剖析
    单例模式-DCL双重锁检查实现及原理刨析
    二分查找java实现
    I/O管理杂记
    PCB WCF Web接口增减参数后,在客户端不更新的情况,是否影响客户端,评估测试
    PCB MS SQL 排序应用(row_number rank dense_rank NTILE PARTITION)
  • 原文地址:https://www.cnblogs.com/cjj-ggboy/p/12826483.html
Copyright © 2011-2022 走看看