美文网首页
Swift函数

Swift函数

作者: Rokkia | 来源:发表于2016-07-08 14:15 被阅读13次

    1.函数的定义

    func functionName(params:type)->returnValue{
    
    }
    

    这就是一个函数的基本构成
    包裹func关键字表明是一个函数 functionName 函数名 (函数的参数) -> 返回值类型 {

    }

    2.返回多个返回值
    这里其实本质还是返回一个返回值,但是swift中有元组这个东西,我们就可以利用元组的特性,往里面放置多个不同类型的值,然后返回这个元组,本质我们还是返回了一个元组,这是元组中有多个值而已
    如:需要获得两个数的和 与积

    func addMul(a:Int ,b:Int)->(c:Int, d:Int){
        return (a + b ,a * b)
    }
    let addValue = addMul(20, b: 10)
    

    然后option看一下addValue的值 是一个元组 里面存有两个值

    3.函数的参数使用
    函数的参数是一个很好玩的地方
    首先我们从个数来看
    一个时:

    func printYourInfo(name:String){
        print("\(name) ")
    } 
    printYourInfo("1Ran")
    

    两个时

    func printYourInfo(name:String ,age:Int){
        print("\(name) ,\(age)")
    }
    printYourInfo("1Ran", age: 18)
    

    有没有发现 第二个参数有一个age: 为什么第一个没有呢 这里是为了参数提示 第一个没有是因为开发者认为应该名字中有提示 函数应该写为

    func printYourInfoWithName(name:String ,age:Int){
        print("\(name) ,\(age)")
    }
    

    这样才是最完整的

    外部参数:
    为什么第二个参数提示的是age呢 因为我们声明这个函数的时候就是age 那加入我需要的是两年前的年龄要怎么写呢 可以这样写

    func printYourInfo(name:String ,twoYearsAgoAge age:Int){
        //注意喽,函数内还是使用age  因为age name被称为内部参数  专门在函数内使用
        print("\(name) ,\(age)")
    }
    

    这样你在使用这个函数的时候代码就会自动提示twoYearsAgoAge了

    隐藏外部参数:
    加入我们写一个add函数 明确就是传两个数 我们就没必要提示 num1 num2 这时我们就可以隐藏外部参数 使用 "_"

    func add(num1:Int ,_ num2:Int)->Int{
          return num1 + num2
    }
    

    这样写完后第二个参数就不会有提示了

    可变参数:
    当我们使用print()的时候有没有发现我们可以填任意多个数值,就是因为print()使用了可变参数 "..." 的使用 比如我们要计算多个数的和

    func addNums(var num1:Int ,_ num2:Int...)->Int{
        for num in num2 {
            num1 += num
        }
        return num1
    }
    let num = addNums(1,2,3,4,5)   //num = 15哦
    

    初始化参数
    这也是一个很有意思的地方,你可以个参数一个初值,这样你在使用的时候可以考虑不给这个参数赋值 加入计算两个数的乘积

    func mulNum(num1 :Int ,num2: Int = 10)->Int{
        return num1 * num2
    }
        //使用的时候你会发现一件有意思的事   就是你有多个选择   
        //一个是没有第二个参数的   这时会默认使用默认值
        //另外一种就是两个参数  这样就不会使用默认值
    mulNum(10, num2: 20)   //这里返回  200
    mulNum(30)                    //这里返回  300
    

    这里是重点哦!!!!还是关于参数
    当你在函数内需要改变你的参数的时候,你会发现编译器会报错,option点一个那个参数看一下会发现,是一个let类型 我们需要明确标注他是一个var才可以

    func ToBinary(var num:Int)->String{
        var str:String = ""
        repeat{
            str = "\(num % 2)" + str
            num /= 2;
        }while(num > 0)
        return str
    }
    

    这里num就设置成了var类型

    let num = 10
    ToBinary(num)
    num      
    

    思考一下 最后一个num的值回事多少呢 是10还是0呢
    这里的答案就是10 为什么 因为num在赋值的时候是值传递 也就是num copy了一份 然后把copy的传递了进去 于是当我们执行完成后再看num时还是10
    假如我们想修改num的值怎么办呢 这就引出了 inout关键字

    //改写
    func ToBinary1(inout num:Int)->String{
        var str:String = ""
        repeat{
            str = "\(num % 2)" + str
            num /= 2;
        }while(num > 0)
        return str
    }
    //在传参的时候也需要注意   这里需要
    var num = 10   //这里需要是var哦
    ToBinary(&num)
    num    //这里你会发现   num为0
    

    函数类型的使用
    上面叫函数类型,每个函数有自己的类型,如:

    func addNum(num1:Int ,num2:Int)->Int{
        return num1 + num2
    }
    

    这个函数是上面类型呢,很简单去掉func 去掉名字 是一种类型 自然不会关注函数名 去掉后面的{} 剩下的就是这个类型了 ,使用一下看看

    let funcAdd:(Int,Int)->Int  = addNum
    funcAdd(10 ,20)   //这里是30哦
    

    我们可以将函数看做成一个变量 说到变量函数的参数也是变量 返回值也是变量 也就是说 函数类型 可以作为函数的参数 函数的返回值

    先来讨论下作为参数的时候:
    加入我们根据一个商品的重量来算价格 大于60时 为三倍价格 否则为一倍价格:

    func price(weight:Double)->Double{
        if weight > 60 {
            return 3
        }else{
            return 1
        }
    }
    func totalPrice(weight:Double, goodPrice:(Double)->Double)- >Double{
        return weight * goodPrice(weight)
    }
    let goodP = totalPrice(70, goodPrice: price)
    

    这里我们定义了第一个函数 然后在第二个函数中的第二个参数为第一个函数的函数类型 在使用的时候 第二个参数传入第一个函数的名称 就将第一个函数传入了

    作为返回值使用的时候:
    上面的情景改写 当物品重量大于60时 我们希望计算方式为 3 * weight + 10 小于60时 计算方式为 2 * 60 - 10 实现以下看看

    func goodBigger60(weight:Double)->Double{
        return weight * 3 + 10
    }
    func goodSmaller60(weight:Double)->Double{
        return 60 * 2 - 10
    }
    func choseSumWith(weight:Double)->(Double)->Double{
        if weight >= 60 {
            return goodBigger60
        }else{
            return goodSmaller60
        }
    }
    let big60 = choseSumWith(70)
    big60(70)
    let small60 = choseSumWith(50)
    small60(50)
    

    使用的方法很简单 但是原理一样
    最后说一下
    函数是引用类型!!
    函数是引用类型!!
    函数是引用类型!!

    相关文章

      网友评论

          本文标题:Swift函数

          本文链接:https://www.haomeiwen.com/subject/yyfrjttx.html