四、swift3.0函数的使用
来源:互联网 发布:zeppelin 修改端口 编辑:程序博客网 时间:2024/06/05 16:11
一、函数的定义和调用函数
二、swift中函数的其它使用方法
1、递归函数:一个函数体内调用它自身的函数成为称为递归函数,递归函数内部包含了一种循环,在使用递归函数时,必须在某个时刻函数的返回值是确定的,避免出现死循环。
2、设置函数形参默认值,便于调用函数时可以省略该形参
3、形式参数个数可变
4、In-Out形参
在swift函数中,如果其形参是值类型,那么在函数体中无法改变其传入参数的值;如果参数是引用类型,则可以在函数体内对参数本身进行修改。
inout关键字可以把外部值类型的参数传入到函数内,这样就可以修改其值。
注:不管是值类型参数、引用类型参数,swift都只是将参数的副本传入函数内,只不过值类型的参数所传递的是值本身的副本,而引用类型的参数传入引用的副本,引用对象本身并没有生成副本。
5、函数类型:类似于C语言的函数指针,但swift更简单易懂
5.1、把函数赋值给一个变量
可以使该变量在不同时间指向不同的函数,使得程序更灵活
5.2、函数类型作为函数的参数
当函数的大部分计算逻辑都可以确定,某些处理逻辑需要随机变动,则需要函数类型作为该函数的参数
6、使用函数类型作为返回值类型
三、函数的重载
swift中允许定义多个同名的函数,只要形参列表或者返回值类型不同即可
函数是执行特定任务的一段代码,函数是代码复用的重要手段,swift中的函数比C语言的函数更加强大。
在swift中,如果把函数放在枚举、结构体、类以外定义,则称为函数;如果放在类、结构体、枚举之内定义则称为方法。
定义函数的格式:
func name(parameters) -> <return type> { function body }
func ma_x(x: Int, y: Int) -> Int { let z = x > y ? x : y return z}let x = ma_x(x: 10, y: 20)
//定义没有返回值的函数func test1(Int: x) -> () { print(x + 10)}func test2(Int: y) -> Void { print(y)}func test3(Int: z) { print(z)}
//定义没有参数的函数func test_1() -> String { return "123"}//定义没有参数没有返回值的函数func test_2() { print(“456”)}//返回多个参数,把返回值类型定义为元组类型即可func test1(a : Int, b : Int) -> (Int, Int) { return(a+b, a-b)}
二、swift中函数的其它使用方法
1、递归函数:一个函数体内调用它自身的函数成为称为递归函数,递归函数内部包含了一种循环,在使用递归函数时,必须在某个时刻函数的返回值是确定的,避免出现死循环。
func test(a: Int) -> Int { if a == 0 { return 1 } else if a == 1 { return 4 } else { return 2 * test(a: a - 1) + test(a: a - 2) } }
2、设置函数形参默认值,便于调用函数时可以省略该形参
func test(a: Int = 9, b: Int = 10) -> Int { return a+b}test()test(a: 1)test(b: 2)
3、形式参数个数可变
func test(socre: String..., age: Int) -> Int { for str in socre { print(str) } return age + 1 } test(socre: "123", "234", age: 23)
4、In-Out形参
在swift函数中,如果其形参是值类型,那么在函数体中无法改变其传入参数的值;如果参数是引用类型,则可以在函数体内对参数本身进行修改。
inout关键字可以把外部值类型的参数传入到函数内,这样就可以修改其值。
func swap(a: inout Int, b: inout Int) { let temp = a a = b b = temp}var a = 3var b = 12swap(&a, &b)
注:不管是值类型参数、引用类型参数,swift都只是将参数的副本传入函数内,只不过值类型的参数所传递的是值本身的副本,而引用类型的参数传入引用的副本,引用对象本身并没有生成副本。
5、函数类型:类似于C语言的函数指针,但swift更简单易懂
5.1、把函数赋值给一个变量
可以使该变量在不同时间指向不同的函数,使得程序更灵活
func pow(a: Int, b: Int) -> Int { return a + b}var myFun : (Int, Int) -> IntmyFun = powprint(myFun(1, 2))
5.2、函数类型作为函数的参数
当函数的大部分计算逻辑都可以确定,某些处理逻辑需要随机变动,则需要函数类型作为该函数的参数
func test(data : [Int], fn : (Int) -> Int) -> [Int] { var data = data for i in data { data[i] = fn(data[i]) } return data}//计算和func sum1(a: Int) -> Int { return a+1}//计算平方func square1(a: Int) -> Int { return a*a}test(data: [1, 2, 3], fn: sum1)test(data: [4, 5, 6], fn: square1)
6、使用函数类型作为返回值类型
func sum1(a: Int) -> Int{ return a + a } func sque(a: Int) -> Int { return a*a } func getFunc(type : String) -> (Int) -> Int { switch type { case "12": return sum1 default: return sque } }
三、函数的重载
swift中允许定义多个同名的函数,只要形参列表或者返回值类型不同即可
func test() { print("空空如也") } func test(a: String) { print("有点东西") } //这样写不对,不知道为什么 func test() -> String { print("来个返回值") return "123" } //当形参长度可变时,会造成程序不知道调用那一个重载函数 func test(a: String...) { for b in a { print(b) } }
阅读全文
0 0
- 四、swift3.0函数的使用
- swift3.0 coredata 的使用
- Swift3.0 popToViewController 的使用
- Swift3.0 popToViewController 的使用
- swift3.0:sqlite3的使用
- Swift3.0 -- 构造函数
- swift3.0函数
- Swift3.0中Category的使用
- Swift3.0转场动画的使用
- swift3.0 中NSNotification 的使用
- Swift3.0按钮的基本使用
- Swift3.0 Date日期的使用
- Swift3.0中GCD定时器的使用
- Swift3.0 MBProgressHUD的封装使用
- swift3.0 coreData的使用-日记本demo
- swift3.0中UserDefaults的使用
- 六、swift3.0类的使用
- swift3.0 类的基本使用
- CentOS 6.5下 FastDFS结合Nginx插件实现图片http访问
- php算法
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- C++ 优缺点之我见
- DEFINING TABLE RECORD FORMATS IN HIVE
- 四、swift3.0函数的使用
- Android中判断网络是否连接(可用),不可用跳转设置网络连接
- Matlab学习笔记(5)——classify函数实现线性判别分析
- 计算一组向量相似度
- 接口形式实例化-匿名内部类
- [PAT]1015. Reversible Primes (20)@Java
- XML创建Fragment
- Java生成和操作Excel文件
- 函数和链接性