Swift函数简单使用
- 1.函数官方简介
- 2.函数简单定义
- 无参无返回值:
- 无参有返回值:
- 有参无返回值:
- 3.参数名(外部,内部)
- 设置默认参数
- 设置可变参数
- 4.输入输出参数
- 5.函数类型
- 6.函数类型的使用
- 1.Swift自动推断其函数类型
- 2.函数作为参数
- 3.函数作为返回值
- 7.注意事项
1.函数官方简介
函数在Swift中是绝对重要的一环,所以我们一起来看看官方文档中是怎么来介绍Swift函数的:
函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的时候“调用”这个函数来完成它的任务。
Swift 统一的函数语法非常的灵活,可以用来表示任何函数,包括从最简单的没有参数名字的 C 风格函数,到复杂的带局部和外部参数名的
Objective-C
风格函数。参数可以提供默认值,以简化函数调用。参数也可以既当做传入参数,也当做传出参数,也就是说,一旦函数执行结束,传入的参数值将被修改。在 Swift
中,每个函数都有一个由函数的参数值类型和返回值类型组成的类型。你可以把函数类型当做任何其他普通变量类型一样处理,这样就可以更简单地把函数当做别的函数的参数,也可以从其他函数中返回函数。函数的定义可以写在其他函数定义中,这样可以在嵌套函数范围内实现功能封装。
2.函数简单定义
Swift函数是以func作为前缀,指定函数的返回类型时,用返回箭头-> 后跟返回类型的名称的方式表示:
//大概模样
func 函数名(参数1:参数类型,参数2:参数类型...) -> 返回值类型 {
代码块
return 返回值
}
以及几种常见的几种函数类型:
无参无返回值:
//1
func f1()->Void{
print("这是一个无参无返回值的函数")
}
//2
func f2()->(){
print("这是一个无参无返回值的函数")
}
//最常用
//3
func f3(){
print("这是一个无参无返回值的函数")
}
//注意:严格上来说,虽然没有返回值被定义,hanshu() 函数依然返回了值。
//没有定义返回类型的函数会返回一 个特殊的 Void 值。
//它其实是一个空的元组(tuple),没有任何元素,可以写成()。
无参有返回值:
func fanhui() ->String {
return "hello world";
}
let hello = fanhui()
print(hello)
//打印结果: hello world
有参无返回值:
//参数名:name 参数类型:String
func LuName(name:String) {
print("这里是\(name)广场!");
}
LuName(name: "卢本伟");
//打印结果:这里是卢本伟广场!
3.参数名(外部,内部)
在Swift中函数的参数名可区分外部和内部,外部参数名是在调用时赋值使用,内部参数名是在内部调用时使用。例如:外人喊你大名,而女朋友喊你小宝贝一样。更真实的是没有女朋友也可以
请看下面例子:
//没有女朋友的特殊情况
func Yang1(a:Int,b:Int)->Int{
return a - b
}
//name1是外部参数名,a叫内部参数名;name2是外部参数名,b叫内部参数名;a,b在函数体中使用,name1、name2在调用的时候使用
func Yang2(name1 a:Int,name2 b:Int)->Int{
return a - b
}
//_忽略外部参数名
func Yang3(_ a:Int,name2 b:Int)->Int{
return a - b
}
Yang1(a:10,b:3)
Yang2(name1:10,name2:3)
Yang3(10,name2:3)
设置默认参数
func Yang(name:String = "小宝贝") -> String {
return "你可以喊我\(name)~"
}
let baby = Yang()
// 输出结果:"你可以喊我小宝贝~"
let Husband = Yang("老公")
// 输出结果:"你可以喊我老公~"
设置可变参数
使用须知:
- 使用场景:传入的参数个数不确定的时候
- 它们必须具有相同的类型
- 我们可以通过在参数类型名后面加入(…)的方式来指示这是可变参数
- 一个函数最多只能拥有一个可变参数。
需求:求2个Int型数的和
需求:求3个Int型数的和
想法:能不能设计一个函数,求任意个数的和?也就是这个函数的参数个数是不确定的。---》可变参数
func add(nums:Int...)->Int{
//问题:如何使用nums这个可变参数?
print(type(of:nums))//可变参数当成数组来处理
var sum = 0
for i in nums{
sum += i
}
return sum
}
print(add(nums:10,20))
print(add(nums:10,20,30))
4.输入输出参数
如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。
- 定义一个输入输出参数时,使用 inout 关键字
- 只能传递变量给输入输出参数,不能传入常量或者字面量。因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加&符,表示这个值可以被函数修改。
- 注意: 输入输出参数不能有默认值,而且可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被var 或者 let 标记。
func swap(a:inout Int,b:inout Int){
let tmp = a
a = b
b = tmp
print("a:\(a),b:\(b)")
}
var num1 = 10
var num2 = 30
swap(a:&num1,b:&num2)
print("num1:\(num1),num2:\(num2)")
5.函数类型
每个函数都有种特定的函数类型,函数的类型由函数的参数类型和返回类型组成。
例1:
func add(a:Int,b:Int)->Int{
return a+b
}
func minus(a:Int,b:Int)->Int{
return a-b
}
分析:这两个函数的类型是: (Int, Int) -> Int,可以解读为:“这个函数有两个 Int 型的参数并返回一个 Int 型的值”。
例2:
func printHelloWorld() {
println("hello, world")
}
分析:这个函数的类型是:() -> (),或者叫“没有参数,并返回 Void 类型的函数”。没有指定返回类型的函数总返回Void。在Swift中,Void 与空的元组是一样的。
6.函数类型的使用
1.Swift自动推断其函数类型
func add(a:Int,b:Int)->Int{
return a+b
}
func minus(a:Int,b:Int)->Int{
return a-b
}
var op = add //Swift可以推断出op是一个函数,函数类型是(Int, Int) -> Int
print(op(10,30))//打印结果:40
op = minus
print(op(10,30))//打印结果:-20
2.函数作为参数
func add(a:Int,b:Int)->Int{
return a+b
}
func minus(a:Int,b:Int)->Int{
return a-b
}
func printResult(a:Int,b:Int,mathFunc:(Int,Int)->Int){
print(mathFunc(a,b))
}
printResult(a:10,b:20,mathFunc:add)//mathFunc:add调用上面定义的add函数
//打印结果:30
printResult(a:10,b:20,mathFunc:minus)//mathFunc:minus调用上面定义的minus函数
//打印结果:-10
3.函数作为返回值
func add(a:Int,b:Int)->Int{
return a+b
}
func minus(a:Int,b:Int)->Int{
return a-b
}
func getFunction(c:Int)->(Int,Int)->Int{
if c>10{
return add
}else{
return minus
}
}
print(getFunction(c:12)(10,20))//c大于10返回add函数,然后把10,20分别赋值给add函数里的a和b
//打印结果:30
print(getFunction(c:4)(10,20))//c小于10返回minus函数,然后把10,20分别赋值给minus函数里的a和b
//打印结果:-10
7.注意事项
- 函数的参数默认是 let类型,不可以修改的,如果想要修改,必须使用inout关键字 就是后面说的 引用类型指针传递
- 返回值返回多个:可以用元组或者数组等
- 可选元组类型如(Int, Int)?与元组包含可选类型如(Int?, Int?)是不同的.可选的元组类型,整个元组是可选的,而不只是元组中的每个元素值。
- 如果你提供了外部参数名,那么函数在被调用时,必须使用外部参数名。
- 输入输出参数不能有默认值,而且可变参数不能用 inout 标记。
以上就是我所了解的Swift函数的内容啦,如有错误还请指出~