Swift3之函数(一)

本文简书地址
原创内容,码字不易,费了大量的功夫的,转载请注明出处

学习步骤:
  1. 函数概述
  2. 常量参数,变量参数, I/O 参数

    1.函数 -- 常量参数
    2.函数 -- 变量参数(swift3.0已废弃)
    3.函数 -- I/O 参数
  3. 参数个数的从0到多

    1.函数 -- 不带参数
    2.函数 -- 带参数
    3.可变参数
  4. 返回值个数的从0到多

    1.没有返回值函数
    2.一个返回值
    3.多个返回值 -- 元组

一.先来了解一下函数:

Swift 定义函数使用关键字 func
定义函数的时候,可以指定一个或多个输入参数和一个返回值类型。
每个函数都有一个函数名来描述它的功能。通过函数名以及对应类型的参数值来调用这个函数。函数的参数传递的顺序必须与参数列表相同。
函数的实参传递的顺序必须与形参列表相同,-> 后定义函数的返回值类型。

func funcname(形参) -> 返回值类型
{
实现部分
return 返回值
}
//———————————
形参可以没有,但是()必须有
返回值可以没有,没有返回值时 ->也没有
如:func test(){ }

所以我们从形参(函数参数)返回值两部分来了解函数,至于实现部分则是功能模块,根据需要补充就行。

二. 常量,变量及 I/O 参数

1.函数 – 常量参数

默认在函数中定义的参数都是常量参数,也就是这个参数你只可以查询使用,不能改变它的值。

func 函数名( 参数变量:类型 ,参数变量:类型…){}
说明:
1: func 是函数关键字
2:{} 函数体
3: 参数变量是默认常量类型,不能在函数函数体里面直接修改

/*
测试参数变量的默认类型
*/
func changeParam(value : Int) -> Int
{
    value += 1;
    return value;
}

var test = 10;
let A = changeParam(value:test);

---------------------
以上代码会报错,终端打印的错误信息是:
left side of mutating operator isn't mutable: 'value' is a 'let' constant
    value += 1;
也就是说value 是 let 常量
2.函数 – 变量参数(swift3.0已废弃)

查看更多swift3.x的特性
过去可以在参数前加关键字 var 将其定义为变量,这样函数内部就可以对该参数进行修改(外部的参数任然不会被修改)。
现在这种做法已经被废弃❌,Swift 3 不再允许开发者这样来将参数标记为变量了。

func 函数名(var 参数变量 : 类型,… ) {}
说明
1: func 函数关键字
2: var 参数变量 :类型 表示参数变量是可变变量,不是常量,可以修改

❌ 现在已经不可用,写出来是为了学习过swift2的同学知道

现在只能用一个var变量接收常量参数来实现变量参数的功能了


 func changeParam( value : Int) -> Int
    {
      var value = value//下面再用到value就是变量类型了
      value += 1;
      return value;
    }
3.函数 – I/O 参数

I/O参数又叫输入输出参数,它传入的参数是一个引用,在函数内部修改
了I/O参数,对应的外部参数也会发生改变。
当传入的参数作为输入输出参数时,需要在参数名前加 & 符,表示这个值可以被函数修改。
* 因为I/O参数和外部变量指向同一内存地址,修改的是同一内存的数据,所以内外同时改变。
*一般默认的参数传递都是传值调用(传入的只是这个参数的副本),而不是传引用。

func 函数名(参数: inout 类型) { }

var arr = [1,2,3,4,5];
func testIOParam(dataArray: inout [Int])
{
    if dataArray.count > 0 {
        dataArray .remove(at: 0);
    }
}

testIOParam(dataArray: &arr);//传入的是arr对应的地址  &为取地址符
print(arr);

输出结果为
[2, 3, 4, 5]

三. 函数参数

函数可以接受一个或者多个参数,这些参数被包含在函数的括号之中,以逗号分隔。
func 函数名(参数1:类型 ,参数2:类型,参数3:类型) {函数实现 }

1.函数 – 不带参数

func 函数名() -> 返回值类型
{
return 返回值
}

func test()
{
    print("无参函数")
}
2.函数 – 带参数

func 函数名(参数1:类型 ,参数2:类型 ,参数3:类型) -> 返回值类型
{
return 返回值
}
参数个数根据需要而定

func add(a: Int, b: Int) -> Int
{
    return a + b;
}
print(add(a: 10, b: 5));
3.可变参数

可变参数可以接受零个或多个值。函数调用时,你可以用可变参数来指定函数参数,其数量是不确定的。
可变参数通过在变量类型名后面加入...的方式来定义。

func add(numbers: Int...) -> Int
{
    var totle = 0;
    for num in numbers {
        totle += num;
    }
    return totle;
}

print(add(numbers: 1,2,3,4,5));//调用时多个参数用 , 隔开

四. 函数返回值

1.没有返回值函数
/*
     知道即可,主要是用于闭包,在阅读第三方框架代码时保证可以看懂即可。
     1. 省略返回值   这种最常用。
     2. 返回 ()
     3. 返回 void
    这三种形式在{ }内都不能使用return返回数据,否则会报错
     */
   //情况一
    func 函数名(参数) { }
    //情况二
    func 函数名(参数) -> () { }
    //情况三
    func 函数名(参数) -> Void { }
func test1()
{
    print("无需return返回")
}

func test2() ->()
{
    print("无需return返回")
}

func test3() -> Void
{
    print("无需retrun返回")
}
2.一个返回值

func 函数名(形参)-> 返回值类型
{
return 返回值
}

func add(a: Int, b: Int) -> Int
{
    return a + b;
}
print(add(a: 10, b: 5));
3.多个返回值 – 元组

多个返回值(大于1个)并不是用多个 ->实现返回,而是使用元组的形式。
不了解元组的同学可以看下这篇文章swift元组

//举例而已,不要在意函数有没有意义��
func address(province:String ,city:String)->(province:String ,city:String){

    return (province:province,city:city)
}
var addr = address(province: "河南", city: "郑州")

print("省:\(addr.province),市:\(addr.city)")

返回值是元组的话,可以根据元组的不同声明方式来改变函数如

func address(province:String ,city:String)->(String ,String){

    return (province,city)
}

var (addr1,addr2) = address(province: "河南", city: "郑州")

print("省:\(addr1),市:\(addr2)")

自己研究元组吧,我就不墨迹了。


到这里大家看懂一般的函数已经没问题了,但是呢,总有一些意外情况,让学了以上部分的你感觉不知所措。学海无涯,我们接着来

Swift3之函数CSDN地址(二)
Swift3之函数简书(二)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值