来指定函数返回值的类型。 func greet(...">
美文网首页swift基础
swift基础—函数和闭包(Functions and Clos

swift基础—函数和闭包(Functions and Clos

作者: 莽原奔马668 | 来源:发表于2017-04-12 15:49 被阅读7次

使用"func"来声明一个函数,使用名字和参数来调用函数。使用->来指定函数返回值的类型。

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

  return "Hello \(person), today is \(day)."

}

greet(person:"Bob", day: "Tuesday")

默认情况下,函数使用它们的参数名称作为它们参数的标签,在参数名称前可以自定义参数标签,或者使用“_”表示不使用参数标签。

func greet(_ person: String, on day: String) -> String {

  return "Hello \(person), today is \(day)."

}

greet("John", on: "Wednesday")

使用元组来让一个函数返回多个值。该元组的元素可以用名称或数字来表示。

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(scores:[5, 3, 100, 3, 9])

print(statistics.sum)

print(statistics.2)

函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式:

func sumOf(numbers: Int...) -> Int {

  var sum = 0

  for number in numbers {

    sum += number

  }

  return sum

}

sumOf()

sumOf(numbers: 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(list: numbers, condition: lessThanTen)

函数实际上是一种特殊的闭包:它是一段能之后被调取的代码。闭包中的代码能访问闭包所建作用域中能得到的变量和函数,即闭包是在一个不同的作用域被执行的,你已经在嵌套函数例子中所看到。你可以使用“{}”来创建一个匿名闭包。使用“in”将参数和返回值类型声明与闭包函数体进行分离。

numbers.map({

  (number: Int) -> Int in

  let result = 3 * number

  return result

})

有很多种创建更简洁的闭包的方法。如果一个闭包的类型已知,比如作为一个回调函数,你可以忽略参数的类型和返回值。单个语句闭包会把它语句的值当做结果返回。

let mappedNumbers = numbers.map({ number in 3 * number })

print(mappedNumbers)

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

let sortedNumbers = numbers.sort { $0 > $1 }

print(sortedNumbers)

相关文章

  • swift基础—函数和闭包(Functions and Clos

    使用"func"来声明一个函数,使用名字和参数来调用函数。使用->来指定函数返回值的类型。 func greet(...

  • Swift 基本语法(函数, 闭包)

    前言 接上篇, 这篇聊一下 Swift中的 函数, 闭包 一 函数 二 闭包 Swift 基础 先介绍三篇, ...

  • Swift语法备忘录3-Functions and Closur

    Functions and Closures 函数和闭包 /Use func to declare a funct...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift3.0_闭包(Closure)

    闭包基础 ** 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objecti...

  • 托XX福写个Swift闭包教程

    闭包基础知识 Swift闭包和OC的block类似不过还是有点区别 OC的block是一个匿名函数 Swift 中...

  • Python 入门之 闭包

    Python 入门之 闭包 1、闭包 (1)在嵌套函数内使用(非本层变量)和非全局变量就是闭包 (2)_ clos...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • swift4 闭包

    swift 闭包 闭包:swift 中 函数是闭包的一种类似于oc的闭包闭包表达式(匿名函数) -- 能够捕获上下...

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

网友评论

    本文标题:swift基础—函数和闭包(Functions and Clos

    本文链接:https://www.haomeiwen.com/subject/biymattx.html