学习步骤:
- 函数概述
- 常量参数,变量参数, I/O 参数
1.函数 -- 常量参数 2.函数 -- 变量参数(swift3.0已废弃) 3.函数 -- I/O 参数
- 参数个数的从0到多
1.函数 -- 不带参数 2.函数 -- 带参数 3.可变参数
- 返回值个数的从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)")
自己研究元组吧,我就不墨迹了。
网友评论