Swift学习2---函数和闭包

函数

  Swift使用func关键字声明函数:

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

  通过元组(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()

  作为头等对象,函数既可以作为返回值,也可以作为参数传递:

// 做返回值
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)

 闭包

  本质来说,函数是特殊的闭包,Swift中可以利用{}声明匿名闭包:

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

  如果一个闭包的类型已知,比如作为一个回调函数,你可以忽略参数的类型和返回值。单个语句闭包会把它语句的值当做结果返回。

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

  你可以通过参数位置而不是参数名字来引用参数——这个方法在非常短的闭包中非常有用。 当一个闭包作为最后一个参数传给一个函数的时候,它可以直接跟在括号后面。

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

  闭包其实是 Swift 的一种类型,写作()->(),那么他就可以当做 func 的参数嵌套了。写成这样:

140    func exec(repeat: Int, block:()->())
141    {
142      for i in 1...repeat{
143          block()
144      }
145    }
146
147    exec(10, {println("Hello World")}) 

  Swift 还提出了一个特殊的词汇:Trailing Closures,他的意思是:如果闭包是func的最后一个传参,那么他可以写在外面。如下:

148    func exec(repeat: Int, block:()->())
149    {
150        for i in 1...repeat{
151            block()
152        }
153    }
154
155    exec(10){
156        println("Hello World")
157    }
 
时间: 2024-10-06 04:50:33

Swift学习2---函数和闭包的相关文章

Swift学习笔记 - 函数与闭包

import Foundation //1.函数的定义与调用//以 func 作为前缀,返回箭头 -> 表示函数的返回类型func sayHello(name: String) -> String { let greeting = "Hello " + name + "!" return greeting} println(sayHello("Anna")) //1.1函数的参数与返回值//函数可以有多个输入参数,写在圆括号中,用逗号

Swift学习笔记七:闭包

闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. Swift 会为您管理在 捕获 过程中涉及到的内存操作. 在 函数 章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一: 1. 全局函数是一个有名字但不会捕获任何值的闭包 2. 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 3. 闭包表达式是一个可以捕获其上下文中变量或常量值的没有名字的闭包 一.闭包表达式 闭包函数类似于Objective-C中的block.下面我们用事实说话: let counts =

Swift学习之函数和简单地控件的创建

 今天还是重复昨天做的事情--敲代码,但唯一的不同就是所学的知识不同了,我们又进一步往深得层次学习了,感觉越来越有意思了,虽然临近结束了看着大家积极性越来越低了,但是我知道我不能这样,我要比别人付出的更多,更加的踏实才行,因为我知道我的基础不如别人,目标和动力也和他们不同,看着大家有的说是只要找到工作就好,还有的说只要每个月够花就好,担着真的是大家来这里学习的最终目的吗,如果是这样,真的还不如随便找个工作将就一下,也比这个整天做到这好多了,还交了那么贵得费用,所以何必呢,既然选择了这条路,既然当

Swift 学习笔记 (函数)

函数 函数是一个独立的代码块,用来执行特定的任务.Swift中的函数与Object-C中的函数一样,但是声明与书写的方式不太一样,现在我们就通过几个例子介绍一下Swift中的函数.简单的来说,他与JS中的函数声明有些相像,但是如果有返回值的时候,他们返回值的书写方式又有不同. 先来说一个简单的例子 //greet 函数的名称 //personName:函数的形式参数,可以为多个 用逗号隔开 //->String 函数的返回值类型 如果没有可以不写 func greet(personName:St

Swift 学习- 07 -- 函数

// 函数 // 函数是一段完成特定任务的独立代码片段, 你可以通过给函数命名来标识某个函数的功能, 这个名字可以被用来在需要的时候'调用'这个函数来完成它的任务 // swift 统一的函数语法非常的灵活, 可以用来表示任何函数, 包括从简单的没有参数名字的 C 风格函数, 到复杂的带局部的外部参数 OC 风格函数, 参数可以提供默认值, 以简化函数调用, 参数也可以即当做传入参数, 也当做传出参数,也就是说, 一旦函数执行结束, 传入的参数值会被修改 // 在 swift 中, 每个参数都有

Swift学习(2函数闭包)

函数的定义 1.函数的基础写法 func 函数名(形参列表)->返回值类型 例: func sum(x:int ,y:int) -> int{ return x+y } print(sun(x:10,y:50)) 2.外部参数的使用,就是在形参前加一个名字,外部参数不会影响函数内部细节,外部参数会让外部调用看起来更加的直观 例:func sum(num1 x:int ,num2 y:int )-> int{ return x+y } print(sum(num1:30,num2:40))

swift学习之函数(一)

函数就是实现某些特定功能的模块板块,通过函数名调用(起函数名最好起的最好可以通过函数名就基本知道这个函数是干嘛的,不要嫌麻烦,可以多写点),可以定义一个或多个参数名,参数类型,然后可以有返回类型,当通过函数名调用("call")函数的时候,我们传递的参数类型要和函数定义的参数类型一致 (一)定义和调用函数 我们定义一个sayHello(_:)的的函数,因为这就是这个函数的功能,传入一个人名,返回的是和这个人打招呼.为了完成这个,我们需要一个String类型的传入参数,叫做personN

swift学习之函数类型

var someInt: Int = 7 Int 就是表示someInt的类型,同理,这个Int也可以换成函数类型,所以也可以像其他类型那样使用函数类型 函数类型主要由三种用途:(一)就是上面说的了 (二)作为参数(三)作为返回类型 再加一个,就是函数也可以嵌套(nested) let math: (Int , Int) -> Int = addTwoInts printMathResult(math, a: 9, b: 9) //printMathResult(math, 9, 9) func

swift学习之函数的参数命名

前面文章我说过,给一个函数起名字最好让人通过名字就大概知道你这个函数的大概功能,而不是让人读完内部代码才知道你的函数是干嘛的,大家都是程序员,你不想下个人接你的代码时问候你XXX啥的吧,这也和规范有一定联系的,这次就说说函数的参数命名把 其实函数参数是有外部命名和本地命名的,外部命名就是针对外部调用函数时所写的名字,本地命名就是指在函数块内用来访问使用的,在我个人理解也是一种补充,这也是我个人更喜欢swift的原因,相当于把长的命名拆分了,外部调用也许你还模棱两可,但是当你看到该函数,发现还有本