swift 2.x学习笔记(三)

//: Playground - noun: a place where people can play

 

import UIKit

 

var str = "Hello, playground"

 

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

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

}

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

 

func eat (name : String, food : String) ->String {

    return "Hi, \(name),let eat \(food) for lunch";

}

eat("wjw", food: "beef");

 

//使用元组,让一个函数返回多个值

func caculateStatistics(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 = caculateStatistics([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(42, 597, 12);

 

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

    var aver = 0;

    var count = 0;

    var sum = 0;

    for number in numbers {

        sum += number;

        count++;

    }

     aver = sum/count;

    return aver;

}

averageOf(32, 54);

 

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

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], conditon : Int -> Bool) -> Bool {

    for item in list {

        if conditon(item){

            return true;

        }

    }

    return false;

}

func lessThanTen(number : Int) -> Bool {

    return number < 10;

}

var numbers = [20, 19, 7, 12];

hasAnyMatches(numbers, conditon: lessThanTen);

 

 

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

numbers.map({

    (number: Int) -> Int in

    let result = 3*number;

    return result;

})

//重写闭包,对所有奇数返回0

numbers.map({

    (number : Int) -> Bool in

    let result = Bool(number/2 - 1);

    return result;

})

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

let mappedNumbers = numbers.map({

    number in 3 * number

})

print(mappedNumbers);

 

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

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

print(sortedNumbers);

posted @ 2016-11-16 00:27  wjwdive  阅读(353)  评论(0编辑  收藏  举报