李洪强iOS开发Swift篇—08_函数(2)
2023-09-27 14:28:40 时间
李洪强iOS开发Swift篇—08_函数(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行是错误写法,嵌套函数的作用域仅限于定义嵌套函数的函数体内部
相关文章
- iOS开发常用之 HUD 弹窗
- iOS开发笔记--什么时候调用layoutSubviews
- IOS学习之十七:Grand Central Dispatch(GCD)编程基础
- iOS软件被曝使用私有API:你的数据被偷了
- iOS开发中<null>的处理
- iOS xcode创建静态库封装自己的SDK及使用
- 二、屏幕卡顿 及 iOS中的渲染流程解析
- iOS Public Beta 5值得关注的7个变化
- iOS中 UITableViewCell cell划线那些事 韩俊强的博客
- iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客
- iOS学习之iOS沙盒(sandbox)机制和文件操作复习
- iOS开发-url包括中文报错解决的方法
- iOS开发- 速学Swift-中文概述
- 李洪强漫谈iOS开发[C语言-054]-函数
- iOS开发之记录用户登录状态
- 李洪强iOS开发之带placeHolder的Textview
- iOS开发:Toast for iPhone
- 李洪强iOS开发本人集成环信的经验总结_07_监听好友请求
- 李洪强iOS开发之-环信02_iOS SDK 介绍及导入
- 李洪强漫谈iOS开发[C语言-018]-scanf函数
- 【零基础学习iOS开发】【02-C语言】10-函数
- 李洪强iOS开发之keychain的使用
- 李洪强iOS开发之OC[017]函数和方法的区别
- 李洪强iOS开发之UICollectionView的使用
- 李洪强iOS开发之OC[005] - OC和C的差异学习二
- iOS开发25个性能调优技巧
- iOS开发Swift篇—(十)方法
- iOS图片拉伸技巧
- 那些牛b的ios开发第三方工具(利器虽好,新手慎用)