格式:
func 函数名称(形式参数1 : 形参类型 ,...)-> 返回值类型
{
// 逻辑代码
}
// override代表是重写了父类的方法
override func 函数名称(形式参数1 : 形参类型 ,...)-> 返回值类型
{
// 逻辑代码
}
一、无参数,无返回值
// 定义函数
func say() -> void
{
print("say hello")
}
// 函数调用
say()
几种简写形式:func say() -> () // void可以简写成:()
func say() // 或是直接省略
二、无参数,有返回值
func getNumber() -> Int
{
return 998
}
print ( getNumber())
如果想要返回多个值,OC中的办法是使用指针来实现,在swift中我们使用的是元祖。
func getNumber() -> (Int , Int)
{
return (1 , 998)
}
三、有参数,无返回值
func sum (num1 : Int , num2 : Int)
{
print (num1 + num2)
}
sum (10 , num2 : 20)
// 注意函数调用的这里
// swift2.0开始,默认将第二个参数名作为外部参数。
// 从第二个参数开始后面的参数名称作为标签名称。
如何指定标签
func sum (Value1 num1 : Int , Value2 num2 : Int)
{
print (num1 + num2)
}
sum (Value1 : 10 , Value2 : 20)
// 现在指定标签就是Value1、Value2了
如何忽略指定标签
func sum (num1 : Int , _num2 : Int)
{
print (num1 + num2)
}
sum (10 , 20)
// 本来默认第二个参数的名称是作为标签的,在参数名前面加了下划线后就忽略了。
常量形参和变量形参(也就是OC中所说的值传递和地址传递)
- 默认情况下所有的形参都是常量形参,也就是说在函数中修改形参的值,是不会影响外部实参的值。
- 变量形参,只需在形参名称前面加上inout即可。
func change(inout num1 : Int , inout num2 : Int)
{
let temp = num1
num1 = num2
num2 = temp
}
var n = 10
var m = 20
chang(&n , num2:&m)
// 这步之后 n = 20 , m = 10
-
inout修饰的参数是var类型的。
可变参数
- 当一个函数不确定接收多少个参数的时候,就可以使用可变参数。
func sums (numbers : Int... ) // numbers必须制定类型,传入的是同种类型
{
var sum = 0
for number in numbers // numbers的本质是一个数组
{
sum += number
}
print(sum)
}
sums(1,2,5)
func sums (numbers : Int... , value : Float)
{
var sum = 0
for number in numbers
{
sum += number
}
print(sum)
print(value)
}
sums(1,2,5, value: 11.3)
参数默认值
- 可以给形参制定默认值,如果一个形参制定了默认值,那么调用的时候就可以不传递参数的值。如果是传递了参数,就优先使用传入的值。
func joinString(str1 : String, str2 : String = "哈哈", str3 : String)
{
print(str1,str2,str3)
}
// 输出:你,我,他
joinString("你", str2: "我", str3: "他")
// 输出:你,哈哈,他
joinString("你", str3: "我")
四、有参数,有返回值
func sum( num1 : Int , num2 : Int) -> Int
{
return num1 + num2
}
let a = sum( 20 , mun2:10)