Swift之旅(三)函数与闭包
来源:互联网 发布:淘宝宝贝主图怎么修改 编辑:程序博客网 时间:2024/09/21 06:17
用 func 来定义一个函数。func后面写上函数名,紧跟着是参数列表,写在括号里。在返回类型与参数名之间用 -> 来分隔开。
func greet(name: String, day: String) -> String { return "Hello \(name), today is \(day)."}greet("Bob", "Tuesday")
试一试
去掉 day 参数。在问候语里加上一个今天特价菜的参数
使用元组来创建一个组合值——例如,要从函数里返回多个值。元组里的这些元素既可以用名称进行引用,也可以用数字来引用。
func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) { var min = scores[0] var max = scores[0] var sum = 0 for score in scores { if score > max { max = score } else if score < min { min = score } sum += score } return (min, max, sum)}let statistics = calculateStatistics([5, 3, 100, 3, 9])println(statistics.sum)println(statistics.2)
函数还可以接受一批参数,将它们收集到一个数组里。
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()
函数是头等(first-class,博主注:不知道该怎么翻译了)类型。意思是函数可以返回另一个函数作为它的值。
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)
函数其实是闭包(可以过后调用的代码段)的一个特例。闭包内的代码可以访问到变量和函数必须是与闭包创建的范围是一致的,即便闭包是在另一个范围内执行——在讲嵌套函数时就说过这个例子了。闭包可以不用写名称,只需把代码写在花括弧内 ({})。在代码体里用 in 来分隔开参数和返回类型。
numbers.map({ (number: Int) -> Int in let result = 3 * number return result})
试一试
重写这个闭包,对所有奇数都返回0
有几种方法可以更简明地写闭包。当闭包的类型是已知的,比如委托的回调,可以忽略掉参数的类型,返回类型,或者两个都忽略。单行语句的闭包隐式返回语句中的值。
let mappedNumbers = numbers.map({ number in 3 * number })println(mappedNumbers)
你可以用数字而不是名称来引用参数——这种方法在非常短的闭包中尤其实用。作为最后一个参数传到函数里的闭包可以在括号后面马上出现。
let sortedNumbers = sorted(numbers) { $0 > $1 }println(sortedNumbers)
0 0
- Swift之旅(三)函数与闭包
- Swift简明教程(三)-函数与闭包
- Swift闭包与函数
- 函数与闭包(Swift)
- Swift 函数与闭包
- 窥探Swift之函数与闭包的应用实例
- 窥探 Swift 之 函数与闭包的应用实例
- Object-C--->Swift之(七)嵌套函数与闭包
- swift学习日记(三) 函数 闭包
- swift学习之三:闭包表达式
- swift的函数与闭包
- Swift初体验-函数与闭包
- Swift之函数和闭包
- swift闭包函数
- Swift 基础语法三--函数和闭包
- Swift基本使用-函数和闭包(三)
- Swift笔记(五)之函数与闭包(Functions and Closures)
- Swift 学习之函数和闭包与对象和类—002
- 关于 Azure 存储帐户(1)
- NOJ1175---Dress, Left Dress!(单调栈)
- Pascal's Triangle II
- 百度地图(五)
- Maven错误generics are not supported in -source 1.3
- Swift之旅(三)函数与闭包
- Java Learning 1
- hdu 3807【最大最小定理】
- 字符串里的正则表达
- JAVA实现C/S通讯
- 如何跟大焕学城市化和房地产
- hdu 4119 Isabella's Message【字符串模拟】
- 腾讯ios,Android宕机日志收集
- “背景建模/背景减法/前景检测”测试视频库