Swift语法专题七——函数

Swift讲解专题七——函数

一、引言

        函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用。Swift提供了十分灵活的方式来创建与调用函数。事实上在Swift,每个函数都是一种类型,这种类型由参数和返回值来决定。Swift和Objective-C的一大区别就在于Swift中的函数可以进行嵌套。

二、函数的创建与调用

        函数通过函数名,参数和返回值来定义,参数和返回值决定一个函数的类型,在调用函数时,使用函数名来进行调用,示例如下:

//传入一个名字 打印并将其返回
func printName(name:String) -> String {
    print(name)
    return name
}
//进行函数的调用
printName("HS")

也可以创建没有参数的函数:

func onePuseTwo()->Int {
    return 1+2
}
onePuseTwo()

同样也可以创建没有返回值的函数:

func sayHello(){
    print("Hello")
}
sayHello()

上面介绍的函数类型都比较常见,对于多返回值的函数,在Objective-C中十分难处理,开发者通常会采用字典、数组等集合方式或者干脆使用block回调,在Swift中,可以使用元组作为函数的返回值,示例如下:

func tuples()->(Int,String){
    return (1,"1")
}
tuples()

也可以是函数返回一个Optional类型的值,支持返回nil,示例如下:

func func1(param:Int)->Int? {
    guard(param>0)else{
        return nil
    }
    return param
}
func1(0)
func1(1)

在函数的参数名前,开发者还可以再为其添加一个参数名称作为外部参数名,示例如下:

func func1(count param:Int ,count2 param2:Int)->Int? {
    //内部依然使用param
    guard(param>0)else{
        return nil
    }
    return param
}
//外部调用使用count
func1(count: 0,count2: 0)
func1(count: 1,count2: 1)

其实Swift函数中的参数列表有这样一个特点,除了第一个参数外,之后的参数都默认添加一个一个和内部名称相同的外部名称,如果开发者不想使用这个外部名称,使用_符号设置,示例如下:

func func2(param:Int,param2:Int,param3:Int) {

}
//有外部名称
func2(0, param2: 0, param3: 0)
func func3(param:Int,_ param2:Int,_ param3:Int) {

}
//没有外部名称
func3(0, 0, 0)

Swift也支持开发者为函数的参数创建一个默认值,如果函数的某个参数有设置默认值,则开发者在调用时可以省略此参数,示例如下:

func func4(param:Int=1,param2:Int=2,param3:Int) {
    print(param,param2,param3)
}
func4(3,param3:3)

还有一种情形在Objective-C中也很处理,对于参数数量不定的函数,在前面章节介绍过,Objective-C一般会使用list指针来完成,在Swift中编写这样的函数十分简单,示例如下:

func func5(param:Int...)  {
    for index in param {
        print(index)
    }
}
func5(1,2,3,4)

Swift中参数默认是常量,在函数中是不能修改外部传入参数的值得,如果有需求,需要将参数声明成inout类型,示例如下:

func func6(inout param:Int)  {
    param = 10
}
var count = 1
//实际上传入的是参数地址
func6(&count)
print(count)

三、函数类型

        函数是一种特殊的数据类型,每一个函数属于一种数据类型,示例如下:

func func7(a:Int,_ b:Int)->Int{
    return a+b
}
var addFunc:(Int,Int)->Int = func7
addFunc(1,2)

函数也可以作为参数传入另一个函数,这十分类似于Objective-C中的block语法,示例如下:

func func7(a:Int,_ b:Int)->Int{
    return a+b
}
var addFunc:(Int,Int)->Int = func7
addFunc(1,2)
func func8(param:Int,param2:Int,param3:(Int,Int)->Int) -> Int {
   return param3(param,param2)
}
//传入函数
func8(1, param2: 2, param3: addFunc)
//闭包的方式
func8(2, param2: 2, param3:{ (a:Int,b:Int) -> Int in
    return a*b
    })

一个人函数也可以作为另一个函数的返回值,示例如下:

func func9()->(Int)->Int{
    //Swift支持嵌套函数
    func tmp(a:Int)->Int{
       return a*a
    }
    return tmp
}
var myFunc = func9()
myFunc(3)
时间: 2024-09-20 00:42:13

Swift语法专题七——函数的相关文章

Swift语法专题二——基本数据类型

Swift解读专题二--基本类型 一.常量和变量         Swift语言的常量和变量在使用之前,必须被定义.常量用于处理程序中只在初始化时设置的量值,之后不能进行赋值改变,变量用于处理程序中可以进行改变的量值.分别用let和var来声明常量和变量,示例如下: var varValue = 1 let letValue = 10 Swift语法也支持在一行中声明多个量值,示例如下: var a=1,b=2.9,c="string" 在声明量值时,编译器会根据第一次赋值的类型来推断

Swift语法专题六——流程控制

Swift讲解专题六--流程控制 一.引言         一种编程语言的强大与否,很大程度上取决于其提供的程序流程控制方案,就如使用汇编语言实现复杂的程序流程是一件痛苦的事情.Swift中提供了许多强大的流程控制语句,例如快速遍历for-in,while循环,repeat-while循环,switch选择等,需要注意的是,在Swift2.2中,for(a;b;c)循环已经被弃用掉,并且Swift中的Switch语句也更加强大,可以处理任意数据类型. 二.for-in循环         配合范

Swift语法专题十二——方法

Swift讲解专题十二--方法 一.引言         方法只是一个术语,其实就是将函数与特定的类型结合,类.结构体.枚举都可以定义方法,方法又分为实例方法和类型方法,类型方法类似于Objective-C中的类方法.Swift和Objective-C的一大不同是,Objective-C只有在类中可以定义方法. 二.实例方法基础         实例方法的语法和函数完全一致,其和具体类型的实例所关联,实例方法在调用时由类型的实例点语法进行调用来完成一些功能模块.示例如下: class Math

Swift语法专题十——类和结构体

Swift讲解专题十--类与结构体 一.引言         Swift中的类与结构体十分相似,和Objective-C不同的是,Swift中的结构体不仅可以定义属性,也可以像类一样为其定义方法.         Swift中的类与结构体有如下相似点: 1.定义属性来存储值. 2.定义函数来提供功能. 3.通过定义下标语法使用下标的方式取值. 4.定义构造方法来对其进行初始化. 5.通过扩展来在原始基础上添加功能. 6.通过协议来定义实现标准. 当然类和结构体也有许多不同点,下面这些功能是类独有

Swift语法专题八——闭包

Swift讲解专题八--闭包 一.引言         Swift中的闭包是有一定功能的代码块,这十分类似于Objective-C中的block语法.Swift中的闭包语法风格十分简洁,其作用和函数的作用相似. 二.从一个系统函数看闭包         Swift标准函数库中提供了一个sort排序函数,对于已经元素类型的数组,调用sort函数会进行重新排序并返回新的排序后的数组.这个sort函数可以接收一个返回值为Bool类型的闭包,来确定第一个元素是否排在第二个元素前面.代码示例如下: var

Swift语法专题九——枚举

Swift讲解专题九--枚举 一.引言         在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据. 二.枚举语法         Swift中enum关键字来进行枚举的创建,使用case来创建每一个枚举值,示例如下: //创建姓氏枚举,和Objective-C不同,Swift枚举不会默认分配值 enum Surname { case 张 cas

Swift语法专题四——字符串与字符

Swift解读专题四--字符串与字符 一.引言         Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的NSString类进行转换,使用起来十分方便. 二.String基础         在Swift中,使用双引号来定义字符串,开发者可以通过如下代码来创建一个字符串常量: let str = "Hello, playground" 可以通过

Swift语法专题三——基础运算符

Swift解读专题三--基础运算符 一.引言          运算符是编程语言不可缺少的一个部分,Swift中除了支持C中的运算符外,还提供了一些更加强大的运算符功能,例如取余符%可以用来计算浮点数,另外新增了两种范围运算符.Swift中有3类运算符: 1.一元运算符 运算符作用于一个操作数,可以出现在操作数前或者操作数后. 2.二元运算符 运算符作用于两个操作数,出现在两个操作数中间. 3.三元运算符 运算符作用于三个操作数间. 二.赋值运算符         赋值运算符用=符号表示,用于初

Swift语法专题五——集合类型

Swift讲解专题五--集合类型 一.引言         Swift中提供了3种集合类型,Array数据类型,Set集合类型,Dictionary字典类型.Array用于存放一组有序的数据,数据角标从0开始一次递增:Set用于存放一组无序的数据,数据不可以重复:Dictionary也用于存放一组无序的数据,只是其是按照键值对的方式存储,键值必须唯一.这里借用官方文档中的一张图来表示3种集合类型的特点: 二.Array类型         Array通常也被称为数组,Swift是一种类型安全语言