一蓑烟雨任平生(溪)

导航

swift基础:第二部分:函数和闭包

     今天本来想利用上午的时间本来打算将swift基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于可以腾出点时间来学习技术了。好了,我们继续学习swift,上一部分我们探讨和学习了swift的数据类型和流程控制语句,swift语句确实很灵活。致一点是不容置疑的。今天我们再来看看swift的函数和闭包。

(1)使用func来声明一个函数,使用名字和参数来调用函数。使用->来指定函数返回值。

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

    return "you name is \(name),today is \(day)"   
}

greeting("bob", day: "tusday")

(2)使用一个元组来返回多个值

greeting("bob", day: "tusday")

func vagetable() -> (Double,Double,Double) {

    return (12.44,34.55,56.77)

}

vagetable()

(3)函数的参数数量是可变的,用一个数组来获取它们

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

    var sum = 0

    for number in numbers {

        sum += number

    }

    return sum

}

sumOf()

sumOf(12,77,44,56)

(4)函数可以嵌套。被嵌套的函数可以访问外侧函数的变量,你可以使用嵌套函数来重构一个太长或者太复杂的函数。

func returnFifteen() -> Int {

    var y = 10

    func add() {

        y += 5
    }

    add()

    return y
}

returnFifteen()

(5)函数可以作为另一个函数的返回值

func makeIncrementer() -> (Int -> Int) {

    func addOne(number: Int) -> Int {

        return 1 + number
    }

     return addOne
}

var increment = makeIncrementer()

increment(7)

 

(6)函数也可以当做参数传入另一个函数

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)

 

(7)函数实际上是一种特殊的闭包,你可以使用{}来创建一个匿名闭包。使用in来分割参数并返回类型

 

 numbers.map({

  (number: Int) -> Int in

  let result = 3 * number

  return result

  })

(8)有很多种创建闭包的方法。如果一个闭包的类型已知,比如作为一个回调函数,你可以忽略参数的类型和返回值。单个语句闭包会把它语句的值当做结果返回。
        你可以通过参数位置而不是参数名字来引用参数——这个方法在非常短的闭包中非常有用。当一个闭包作为最后一个参数传给一个函数的时候,它可以直接跟在括号后面。

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

 


 

posted on 2016-04-26 14:23  一蓑烟雨任平生2017  阅读(158)  评论(0编辑  收藏  举报