Swift中文教程(四)--函数与闭包

原文:Swift中文教程(四)--函数与闭包

Function 函数

  Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用。使用->来区分参数名和返回值的类型:

1 func greet(name: String, day: String) -> String {
2 return "Hello \(name), today is \(day)."
3 }
4 greet("Bob", "Tuesday")

练习:

remove day参数,增加一个参数,比如:今天的午餐特色菜~


1 func greet(name:String, day:String) -> String{
2
3   return "Hello \(name), today is \(day)." //第二章说过用\()来内嵌变量
4
5 }
6
7 greet(‘Joe‘, ‘菩提玉斋‘)

  函数使用元组(tuple)来返回多个值:

1 func getGasPrices() -> (Double, Double, Double) {
2 return (3.59, 3.69, 3.79)
3 }
4 getGasPrices()

  函数还可以接收可变的参数个数,将这些参数收集在数组里面:


1 func sumOf(numbers: Int...) -> Int {
2 var sum = 0
3 for number in numbers {
4 sum += number
5 }
6 return sum
7 }
8 sumOf()
9 sumOf(42, 597, 12)

练习:

编写一个函数并求出其参数的平均值。

  函数是可以嵌套的,嵌套过的函数可以访问到外部函数声明过的变量,使用函数嵌套可以便于你组织过长或复杂的函数:


1 func returnFifteen() -> Int {
2 var y = 10
3 func add() {
4 y += 5
5 }
6 add()
7 return y
8 }
9 returnFifteen()

  在Swift中,函数是第一等类型,这意味着一个函数可以将另外一个函数作为它的返回值:


1 func makeIncrementer() -> (Int -> Int) {
2 func addOne(number: Int) -> Int {
3 return 1 + number
4 }
5 return addOne
6 }
7 var increment = makeIncrementer()
8 increment(7)

  函数还能接收其它函数作为它的参数:


 1 func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
2 for item in list {
3 if condition(item) {
4 return true
5 }
6 }
7 return false
8 }
9 func lessThanTen(number: Int) -> Bool {
10 return number < 10
11 }
12 var numbers = [20, 19, 7, 12]
13 hasAnyMatches(numbers, lessThanTen)

  

  Closure 闭包

  

  函数其实是一种闭包的特殊情况,你可以写一个用花括号{}包裹的匿名闭包,用in来区分参数与主体的返回类型:

1 numbers.map({
2 (number: Int) -> Int in
3 let result = 3 * number
4 return result
5 })

练习:

重写这个闭包来对所有奇数返回0

  闭包有多种简洁的写法。当返回值类型已知时,比如委托回调,你就可以省略它的参数类型,它的返回值类选,或者二者都略去,单行语句的闭包可以直接隐式地返回此一语句的值:

1 numbers.map({ number in 3 * number })

  你可以通过数字而不是名字来引用一个参数,这对于很短的闭包非常有用。一个闭包通过圆括号传递其最后一个参数到函数能立即生效:

1 sort([1, 5, 3, 12, 2]) { $0 > $1 }

谢谢,Swifter-QQ群:362232993,同好者进~

Swift中文教程(四)--函数与闭包,布布扣,bubuko.com

时间: 2024-08-24 02:20:16

Swift中文教程(四)--函数与闭包的相关文章

Swift中文教程(1)-简介

转载请注明 http://write.blog.csdn.net/postedit/28442151 翻译者:gumpstar 昨天Swift刚出来,以后自己可能会在手机上开发计算机视觉应用,就打算每天学习一点点. 简介 Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束.Swift采用了安全的编程模式和添加现代的功能来是的编程更加简单.灵活和有趣.界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向

Apple Swift 中文教程 快速参考 基本语法 更新中...

总的来说,语法有java的味道,也有python的味道,还有swift自己的味道. 有些语法还是挺不伦不类的,不太好理解,即使你有几年的java或python经验,也不见得有些语法你能很轻松的看明白. 有些语法特性很好,很个性,但有些语法个人感觉乱,特性多,注意点多,还不太好理解. 慢慢学习吧... ================================================================= 值类型 Int Double Bool String 用双引号"&

Swift中文教程(五)--对象和类

原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文里面,否则,方法和函数的写法也是这样: 1 class Shape { 2 var numberOfSides = 0 3 func simpleDescription() -> String { 4 return "A shape with \(numberOfSides) sides.&q

Swift中文教程(六)--枚举和结构

原文:Swift中文教程(六)--枚举和结构 Enumerations 枚举 使用 enum 来创建一个枚举.跟Classes(类)和其他类型的命名方式一样,枚举也可以有Method(方法). 1 enum Rank: Int { 2 case Ace = 1 3 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten 4 case Jack, Queen, King 5 func simpleDescription() -> Stri

Swift中文教程(七)--协议,扩展和泛型

Protocols and Extensions 协议(接口)和扩展 Swift使用关键字protocol声明一个协议(接口): 类(classes),枚举(enumerations)和结构(structs)都可采用协议(protocol): 1 class SimpleClass: ExampleProtocol { 2 var simpleDescription: String = "A very simple class." 3 var anotherProperty: Int

Swift中文教程(一)--欢迎来到Swift的世界

原文:Swift中文教程(一)--欢迎来到Swift的世界 Apple凌晨时在WWDC发布了Swift编程语言,语法简介我很喜欢,市面上没有完整的中文教程,我在ibooks里面下载了英文原版,现在开始尝试翻译Swift.我会抽时间坚持原版翻译完,时间有限,不正之处请大家多多指教. 新建了Swifter-QQ群:362232993,同好者进. 第一章:欢迎来到Swift的世界 1,简介 Swift是一款全新的面向IOS和OS Apps的编程语言,建立在C语言和Objective-C语言的基础之上,

Swift 中文教程

Apple发布了替代oc的利器语言 Swift ,牛叉的中国开发者社区在9天的时间内就汉化了,这是多少中国开发者的福音啊,发现了之后异常兴奋,写个日志保存下,防止立马忘记: GitHub开源项目:<The Swift Programming Language>in Chinese 在线中文版: http://www.swiftguide.cn 或者 http://numbbbbb.github.io/the-swift-programming-language-in-chinese/ 中文社区

Swift中文教程(三)--流程控制

原文:Swift中文教程(三)--流程控制 Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环.条件控制语句和循环语句中,小括号是可选的,但花括号包住这个循环体是必须的: 1 let individualScores = [75, 43, 103, 87, 12] 2 var teamScore = 0 3 for score in individualScores { 4 if score > 50 { 5 teamScore += 3

Swift中文教程(二)--简单值

原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: 1 var myVariable = 42 2 myVariable = 50 3 let myConstant = 42 这里的常量赋值之后值不能更改,应该提高重用性. 一个常量或变量的值与类型必须是一致的.不过,你不需要指明它的类型,因为编译器会根据你所赋的值推断它的类型,在上面的例子中,编译器会判断到myVariable