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

  • 相关阅读:
    北京燃气IC卡充值笔记
    随机分析、随机控制等科目在量化投资、计算金融方向有哪些应用?
    量化交易平台大全
    Doctor of Philosophy in Computational and Mathematical Engineering
    Institute for Computational and Mathematical Engineering
    Requirements for the Master of Science in Computational and Mathematical Engineering
    MSc in Mathematical and Computational Finance
    万字长文:详解多智能体强化学习的基础和应用
    数据处理思想和程序架构: 使用Mbedtls包中的SSL,和服务器进行网络加密通信
    31-STM32+W5500+AIR202/302基本控制篇-功能优化-W5500移植mbedtls库以SSL方式连接MQTT服务器(单向忽略认证)
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/6067962.html
Copyright © 2011-2022 走看看