Swift中文教程(四)--函数与闭包
Function 函数
Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用。使用->来区分参数名和返回值的类型:
func greet(name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")
练习:
remove day参数,增加一个参数,比如:今天的午餐特色菜~
func greet(name:String, day:String) -> String{ return "Hello \(name), today is \(day)." //第二章说过用\()来内嵌变量 } greet('Joe', '菩提玉斋')
函数使用元组(tuple)来返回多个值:
func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}
getGasPrices()
函数还可以接收可变的参数个数,将这些参数收集在数组里面:
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)
练习:
编写一个函数并求出其参数的平均值。
函数是可以嵌套的,嵌套过的函数可以访问到外部函数声明过的变量,使用函数嵌套可以便于你组织过长或复杂的函数:
func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()
在Swift中,函数是第一等类型,这意味着一个函数可以将另外一个函数作为它的返回值:
func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
函数还能接收其它函数作为它的参数:
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanTen)
Closure 闭包
函数其实是一种闭包的特殊情况,你可以写一个用花括号{}包裹的匿名闭包,用in来区分参数与主体的返回类型:
numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
})
练习:
重写这个闭包来对所有奇数返回0
闭包有多种简洁的写法。当返回值类型已知时,比如委托回调,你就可以省略它的参数类型,它的返回值类选,或者二者都略去,单行语句的闭包可以直接隐式地返回此一语句的值:
numbers.map({ number in 3 * number })
你可以通过数字而不是名字来引用一个参数,这对于很短的闭包非常有用。一个闭包通过圆括号传递其最后一个参数到函数能立即生效:
sort([1, 5, 3, 12, 2]) { $0 > $1 }
谢谢,Swifter-QQ群:362232993,同好者进~
Swift中文教程(四)--函数与闭包的更多相关文章
- Swift中文教程(一)--欢迎来到Swift的世界
原文:Swift中文教程(一)--欢迎来到Swift的世界 Apple凌晨时在WWDC发布了Swift编程语言,语法简介我很喜欢,市面上没有完整的中文教程,我在ibooks里面下载了英文原版,现在开始 ...
- Swift中文教程(六)--枚举和结构
原文:Swift中文教程(六)--枚举和结构 Enumerations 枚举 使用 enum 来创建一个枚举.跟Classes(类)和其他类型的命名方式一样,枚举也可以有Method(方法). enu ...
- Swift中文教程(五)--对象和类
原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文 ...
- Swift中文教程(二)--简单值
原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: var myVariable ...
- Swift中文教程(三)--流程控制
原文:Swift中文教程(三)--流程控制 Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环.条件控制语句和循环语句中,小括号是可选的,但花 ...
- swift学习笔记2——函数、闭包
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Apple Swift 中文教程 高速參考 基本的语法
总的来说.语法有java的味道,也有python的味道,还有swift自己的味道. 有些语法还是挺不伦不类的,不太好理解,即使你有几年的java或python经验,也不见得有些语法你能非常轻松的看明确 ...
- Swift中文教程(二)基本运算符
1.基本运算符 运算符是一种特定的符号或表达式,用来检验.改动或合并变量.比如,用求和运算符+能够对两个数字进行求和(如let i = 1 + 2):略微复杂一点的样例有逻辑与操作符&& ...
- Swift中文教程 第2章 基本运算符 (20140604更新)
今天我在下午又进行了新的翻译,之前我翻译的大家有没有看啊,感觉如何,我昨天下午不小心点了什么原先的文章都没了,大家的评论也没了,现在我也找不回来了,希望大家能继续给我新的评论和支持点个推荐,毕竟现在学 ...
随机推荐
- uml 9图不同的角度品种分类
只要阅读uml视频后为其9一些模糊样图或理解.话又说回来后来他们自己的系统看着笔记,统的了解.以下分别从两个不同的角度对uml中9种图进行理解以及当中某些图的区分,本人比較菜,有些不完好的地方欢迎提出 ...
- NodeJS常用模块介绍
收集了NodeJS开发中常用的一些模块. MVC框架 - Express Express 是轻量灵活的Nodejs Web应用框架,它可以快速地搭建网站.Express框架建立在Nodejs内置的Ht ...
- hdu 3652 B-number(数字dp)
http://acm.hdu.edu.cn/showproblem.php? pid=3652 大致题意:"B-number"即一个整数含有子串"13"且被13 ...
- 第四章——SQLServer2008-2012资源及性能监控(3)
原文:第四章--SQLServer2008-2012资源及性能监控(3) 本文为本系列最后一章,监控内存使用.监控服务器的内存是非常重要的事情,有很多情况会引起内存消耗.所以要经常性地做检查. 本文将 ...
- Team Foundation Server 2015使用教程--tfs用户账号切换
- nodejs的安装和使用
一 下载 下载地址: https://nodejs.org/download/ 二 安装 1 win7系统直接双击,就能够执行了: 2 win8须要使用管理员权限执行,否则会报错Error 2502, ...
- hdu 2067 兔子板
兔子板 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 学习笔记 broswerify + watchify + beefy
broswerify “Browserify lets you require('modules') in the browser by bundling up all of your depende ...
- 集成 NHibernate
ABP 基础设施层——集成 NHibernate 本文翻译自ABP的官方教程<NHibernate Integration>,地址为:http://aspnetboilerplate.co ...
- 一旦rhel5.8造成只读文件系统ORA-00354: corrupt redo log block header
一旦rhel5.8造成只读文件系统ORA-00354: corrupt redo log block header Wed Jun 03 03:31:24 CST 2015 Thread 1 adva ...