美文网首页
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学习笔记(二)

    Swift函数 Swift函数包含参数类型和返回值类型 函数定义 Swift使用关键字func定义函数。 函数定义...

  • Swift中的标准函数

    Swift中的标准函数 Swift中的标准函数

  • Swift の 函数式编程

    Swift の 函数式编程 Swift の 函数式编程

  • 10.函数(function)

    函数 kotlin_函数 swift_函数

  • swift 函数

    Swift 函数 函数声明: 告诉编译器函数的名字,返回类型及参数。 函数定义: 提供了函数的实体。Swift 函...

  • swift学习笔记②

    Swift学习笔记 - 文集 语法篇 一、函数 函数定义 Swift 定义函数使用关键字 func,functio...

  • #6 函数

    swift functions - 极客学院 swift的函数和JS的函数基本类似,有几点不同的是: swift中...

  • iOS知识点-9.Swift 是面向对象还是函数式的编程语言?

    Swift Basics Swift 是面向对象还是函数式的编程语言? Swift既是面向对象的,又是函数式的编程...

  • Swift高阶函数解析

    一、锲子 最近在学习Swift过程中发现,Swift有不少高阶函数,这些函数为Swift支持函数式编程范式提供了强...

  • swift 临时

    //// ViewController.swift// Swift01_函数//// Created by ...

网友评论

      本文标题:Swift函数

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