• 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);

  • 相关阅读:
    牛券
    探险
    雷达安装
    智力大冲浪
    奶牛玩杂技
    BJWC2008 秦腾与教学评估
    JSOI2010 部落划分
    作诗
    ASP.NET MVC4系列验证机制、伙伴类共享源数据信息(数据注解和验证)
    正则表达式
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/6067962.html
Copyright © 2020-2023  润新知