swift和OC的函数天差地别,OC的方法类型与书写方式和调用方式都与swift不一样。
1. 函数的定义
swift里面,如果要声明一个方法,需要先写func,这里的func意思就是,我们要声明一个方法啦,swift给我们的方法定义如下
func <#name#>(<#parameters#>) -> <#return type#> {
<#function body#>
}
* <#name#>:方法名
* <#parameters#>:参数名(入参)
* <#return type#>:返回参数
* <#function body#>:方法实现
下面我们举两个例子,分别是打印的方法和一个计算和的方法,打印的方法不需要返回值也不需要入参,计算和方法需要入参和返回值
/**
打印方法
*/
func pr() {
print("swift打印方法")
}
/**
计算和的方法
- Parameters:
- v1: 传入参数v1
- v2: 传入参数v2
- Returns: 返回v1和v2的和
*/
func sum(v1:Int, v2:Int) -> Int {
return v1 + v2;
}
//下面是方法调用
//调用打印方法
pr()
//调用计算方法
var num = sum(v1: 5, v2: 7)
上面的打印方法,我们其实是简写了,func pr()如果要写全其实应该是func pr() -> Void,还可以写成func pr() -> (),这三种写法其实是一样的。
包括在sum方法中,return v1 + v2可以省略这个return,省略的前提是函数的方法实现是一个单一的表达式,但是我不建议这么做,因为人看代码还得反应一下哈哈。
2.多返回值
在swift里面实现多返回值,可以使用元组,很方便,例如下面这个例子,是获得一个半径,然后计算圆的直径、周长、面积,并调用方法打印相关的值
/**
计算圆的直径、周长、面积
- Parameter radius: 半径
- Returns: 一个元组,包含了diameter直径,perimeter周长,extent面积
*/
func circular(radius:Float) -> (diameter:Float, perimeter:Float, extent:Float) {
let dia = radius*2
let per = 3.14 * 2 * radius
let ext = 3.14 * (radius * radius)
return (dia, per, ext)
}
//调用方法以及打印
let result = circular(radius: 5)
print(result.diameter) //结果:10.0
print(result.perimeter) //结果:31.400002
print(result.extent) //结果:78.5
执行结果如下图
圆方法执行结果.png
3.默认参数
swift的参数可以设置为默认的,传参时如果没有传入新值,使用时将使用默认值,举个🌰
/**
有默认值的汽车信息方法
- Parameters:
- brand: 汽车品牌
- mode: 挡的方式,默认是自动挡
- color: 车的颜色,默认是白色
- Returns: 没有返回值
*/
func car(brand:String, mode:String = "自动挡", color:String = "白") -> () {
print("这辆汽车是\(brand)牌子的,\(mode),\(color)色的,很酷。")
}
//调用
car(brand: "福田")
car(brand: "红旗", color: "黑")
结果如下图
方法默认参数调用结果.png
4.参数标签
有时候特别简单的方法,比如计算一个和,我们需要传入两个参数,但是参数标签显得有点长,或者有时候方法和参数连起来并不连贯,这时候我们可以省略参数名或者给参数名加个标签
/**
参数省略标签
- Parameters:
- v1: 参数1
- v2: 参数2
- Returns: 乘积
*/
func multiplication(_ v1:Int, _ v2:Int) -> Int {
v1 * v2
}
/**
参数添加标签
- Parameter time: 时间
*/
func goToWork(at time:String) {
print("time is \(time)")
}
//调用
multiplication(3, 7)
goToWork(at: "09:00")
5.可变参数
可变参数实现的方式不止一种,这里主要说的是参数里面有...这种方式,不过这里我先写一个传入数组的,理论上来说数组其实就是一个可变参数,下面这个方法里面用到了类型转换,在swift里面,类型相同才能进行计算,还用到了之前章节的 for-in
/**
计算和
- Parameter numbers: 一个数组,元素是int
- Returns: 返回一个double类型的数据
*/
func sum(numbers:Array<Int>) -> Double {
var temSum:Double = 0
for number in numbers {
temSum += Double(number)
}
return temSum
}
//调用
let numbers : Array = [7, 88, 13, 101]
let result = sum(numbers: numbers)
进入正题,我不使用数组,但实现和上面一个效果的方法,使用可变参数,例
/**
使用可变参数实现数字和
- Parameter numbers: 可变参数,类型int
- Returns: 返回一个double类型的数据
*/
func sum(numbers:Int...) -> Double {
var temSum:Double = 0
for number in numbers {
temSum += Double(number)
}
return temSum
}
//调用
let result = sum(numbers: 1, 4, 5, 10, 99)










网友评论