zoukankan      html  css  js  c++  java
  • swift学习笔记之-函数

    //函数

    import UIKit

    /*获得系统时间

    var date = NSDate()

    var timeFormatter = NSDateFormatter()

    timeFormatter.dateFormat = "MM:dd" //(格式可俺按自己需求修整)

    var strNowTime = timeFormatter.stringFromDate(date) as String

    print(strNowTime)

    */

    /*===函数是用来完成特定任务的独立的代码块====

        1.没有定义返回类型的函数会返回特殊的值,叫 Void。它其实是一个空的元组(tuple),没有任何元素,可以写成()。

        2.将带有默认值的参数放在函数参数列表的最后

        3.一个函数最多只能有一个可变参数

        4.如果函数有一个或多个带默认值的参数,而且还有一个可变参数,那么把可变参数放在参数表的最后

        5.函数参数默认是常量,想要修改参数值必须声明为变量

        6.对变量参数所进行的修改在函数调用结束后便消失了,并且对于函数体外是不可见的。变量参数仅仅存在于函数调用的生命周期中

    输入输出参数(In-Out Parameters):

        1.在参数定义前加 inout 关键字。一个输入输出参数有传入函数的值,这个值被函数修改,然后被传出函数,替换原来的值

        2.当传入的参数作为输入输出参数时,在调用该参数时需要在参数名前加&符,表示这个值可以被函数修改

        3.输入输出参数不能有默认值,而且可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被 var 或者 let 标记

        4.输入输出参数是函数对函数体外产生影响的另一种方式。输入输出参数和返回值是不一样的,但仍然修改了原来的值

    全局函数(global functions):定义在全局域中

    嵌套函数(nested functions):把函数定义在别的函数体中,默认情况下,嵌套函数是对外界不可见的,但是可以被它们的外围函数(enclosing function)调用。一个外围函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。

    */

    //函数应用1: 找出整型数组中的最大值、最小值、平均值

    var num1 = [-10,-9,-8,-7,-6,-5,-4,-3,-2,-1]

    var num2 = [1,2,3,4,5,6,7,8,9,10]

    var num3 = [333,444,555,666,777,888]

    //num1 = []

    //num2 = []

    func minmax(a ray1:[Int],var b ray2:[Int],inout c ray3:[Int]) ->(min:Int,max:Int,pingjun:Double)?{

        //ray1 = [2,4,6] 由于函数参数默认是常量,所以无法修改ray1参数

        ray2 = [33] //参数ray2声明为变量,可以在函数体内临时修改传入的值,但不改变实际参数的值

        ray3 = [69,3,4]  //参数ray3是一个inout参数,这个实际参数传入的值将通过函数改变,然后传出函数,并替换原来的值,调用时需在参数前加&号

        if ray1.isEmpty == true || ray2.isEmpty == true{return nil}

        var minNumber = 0

        var maxNumber = 0

        var pingjunzhi = 0.00

        var total = 0

        var ray = ray1 + ray2 + ray3

        if ray.count == 0{

            return nil

        }

        for x in ray[0..<ray.count] {

            total += x

            if x<minNumber{

                minNumber=x

            }

            if x>maxNumber{

                maxNumber=x

            }

        }

        pingjunzhi = Double(total/ray.count)

        return (minNumber,maxNumber,pingjunzhi)

    }

    if var a = minmax(a:num1,b:num2,c:&num3){

        print("在整型数组(num1)、(num2) 和修改后的 (num3)中 最小值是:(a.min),最大值是:(a.max),平均值是:(a.pingjun)")

    }else{

        print("所有数组为空,无法找出")

    }

    //求所有数组里面的所有数据的平均值(函数参数个数可变)

    func pingjunzhi(arrays:[Int]...)->Int? {

        if arrays.isEmpty == true {

            print("没有任何数据!")

            return nil

        }

        var total = 0

        var m = 0

        for array in arrays[0..<arrays.count]{

            if array.isEmpty == true {

                print("有部分数组为空!",terminator:" ")

                continue

            }

            m += array.count

            for numbers in array[0..<array.count]{

                total += numbers

            }

        }

        //var result = total/m

            //print("所有数组数据的平均值为:(total/m)")

        return total/m

    }

    var num4 = [9999,1,1,1,1,5]

    num4 = []

    if var qq = pingjunzhi(num1,num2,num4){

        print("所有数组数据的平均值为:(qq)")

    }

    //函数应用2: 函数类型应用、嵌套函数

    //+-*/%运算函数addition subtraction multiplication division rermainder

    func arithmetic(yunsuanfu:String)->(a:Int...)->Int{

        func average(a:Int...)->Int{

            var result = 0

            for x in a{

                result += x

            }

            return result/a.count

        }

        func addition(a:Int...)->Int{

            var result = 0

            for x in a{

                result += x

            }

            return result

        }

        /*

        func substraction(){

            for x in numbers[1..<numbers.count]{

                result -= x

            }

        }

        func multiplication(){

            for x in numbers[1..<numbers.count]{

                result *= x

            }

        }

        func division(){

            for x in numbers[1..<numbers.count]{

                result /= x

            }

        }

        func rermaider(){

            for x in numbers[1..<numbers.count]{

                result %= x

            }

        }

    */

        switch yunsuanfu{

            case "aver":return average

            case "+":return addition

        default: break

        }

        return average

    }

    var tt = arithmetic("+")

    print("结果:(tt(a:1,2,3,4,10))")

    func sumOfNumbers(str: String = "1", _ numbers: Int...) -> Int {  //第一个参数默认为外部参数名,第二和之后为内外部名,“_”可省略其外部名调用他

        var total: Int = 0

        if let num = Int(str) {

            total += num

        }

        

        for number in numbers {

            total += number

        }

        return total

    }

    sumOfNumbers("5",1,2,3)

    读完觉得学到点什么,就( 顶一个!)
  • 相关阅读:
    如何列出陣列中大於n的所有元素? (C/C++) (STL)
    為什麼int *ptr = 345;這樣的寫法有問題?
    如何使用STL寫XML轉檔程式? (C/C++) (STL) (Web) (XML)
    如何判斷回文(palindrome) ? (C/C++) (C) (STL)
    如何將int轉string? (C/C++) (C)
    如何將輸入的字串存到記憶體後,再一起印出來? (C/C++) (C)
    如何為程式碼加上行號? (C/C++) (STL)
    如何将字符串前后的空白去除(C/C++) (STL)
    簡單的Linked List實現
    如何將struct塞進vector? (C/C++) (STL)
  • 原文地址:https://www.cnblogs.com/susufufu/p/5705581.html
Copyright © 2011-2022 走看看