软件发布| 专题库| 优优资讯| 苹果专区| 安卓专区| 软件下载| 首页
优优资讯 电脑教程 安卓教程 安卓攻略 苹果教程 苹果攻略 新闻资讯

Swift编程语言入门之函数与闭包

时间:2015-04-10 来源:本站整理 我要评论

  闭包是引用了自由变量的函数,最早实现闭包的编程语言是Scheme,之后被广泛使用于函数式编程语言。而Swift编程语言也支持闭包,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。接下来我们就具体来了解下Swift函数与闭包。

  使用 func 声明一个函数。调用函数使用他的名字加上小括号中的参数列表。使用 -> 分隔参数的名字和返回值类型。

  func greet(name: String, day: String) -> String {

  return "Hello (name), today is (day)."

  }

  greet("Bob", "Tuesday")

  练习

  去掉 day 参数,添加一个参数包含今天的午餐选择。

  使用元组(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

  } //by gashero

  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)

  函数实际是闭包的特殊情况。你可以写一个闭包而无需名字,只需要放在大括号中即可。使用 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 }

  闭包是引用了自由变量的函数,最早实现闭包的编程语言是Scheme,之后被广泛使用于函数式编程语言。而Swift编程语言也支持闭包,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。接下来我们就具体来了解下Swift函数与闭包。

  使用 func 声明一个函数。调用函数使用他的名字加上小括号中的参数列表。使用 -> 分隔参数的名字和返回值类型。

  func greet(name: String, day: String) -> String {

  return "Hello (name), today is (day)."

  }

  greet("Bob", "Tuesday")

  练习

  去掉 day 参数,添加一个参数包含今天的午餐选择。

  使用元组(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

  } //by gashero

  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)

  函数实际是闭包的特殊情况。你可以写一个闭包而无需名字,只需要放在大括号中即可。使用 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 }

  闭包是引用了自由变量的函数,最早实现闭包的编程语言是Scheme,之后被广泛使用于函数式编程语言。而Swift编程语言也支持闭包,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。接下来我们就具体来了解下Swift函数与闭包。

  使用 func 声明一个函数。调用函数使用他的名字加上小括号中的参数列表。使用 -> 分隔参数的名字和返回值类型。

  func greet(name: String, day: String) -> String {

  return "Hello (name), today is (day)."

  }

  greet("Bob", "Tuesday")

  练习

  去掉 day 参数,添加一个参数包含今天的午餐选择。

  使用元组(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

  } //by gashero

  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)

  函数实际是闭包的特殊情况。你可以写一个闭包而无需名字,只需要放在大括号中即可。使用 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 }
 

用户评论

(已有0条评论)
表情
注:您的评论需要经过审核才能显示哦,请文明发言!
还没有评论,快来抢沙发吧!
快速检索
0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z