zoukankan      html  css  js  c++  java
  • 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,同好者进~ 

    github地址:https://github.com/Joejo/Swift-lesson-for-chinese

  • 相关阅读:
    一个分油的逻辑问題C#实现
    vmware ESXI安装megacli
    搜索引擎Constellio及Google Search Appliances connectors
    MySQL 数据库性能优化之索引优化
    MySQL 数据库性能优化之缓存参数优化
    MySQL 数据库性能优化之表结构优化
    Spring中的WebAppRootListener
    MySQL 数据库性能优化之SQL优化
    8 个基于 Lucene 的开源搜索引擎推荐
    Spring 用户身份验证
  • 原文地址:https://www.cnblogs.com/joejs/p/3766452.html
Copyright © 2011-2022 走看看