zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    B.Icebound and Sequence
    Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS
    Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
    Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers
    Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number
    Codeforces Round #561 (Div. 2) C. A Tale of Two Lands
    Codeforces Round #561 (Div. 2) B. All the Vowels Please
    Codeforces Round #561 (Div. 2) A. Silent Classroom
    HDU-2119-Matrix(最大匹配)
    读书的感想!
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/6067962.html
Copyright © 2011-2022 走看看