swift 函数

swift中的函数功能足够强大。先定义几个简单的函数看看

func printValue(content :String){
    print(content)
}

func sayHello(name :String) ->String{
    return "hello,\(name)"
}

//依次调用上面的两个函数
printValue("hello,world")

sayHello("kite")

参数和返回值

定义一个函数是以func开头,然后是函数名,后面的括号内是参数列表,多个参数之间用英文的逗号隔开。如果函数有返回值,则将返回值的类型写在一个箭头(->)的后面。

外部参数

外部参数是在调用函数时需要明确给出的参数名,这样做可以提高代码的可读性。定义外部参数的方式是将外部参数名写在形参的前面,用空格隔开。

func sayHello( toName name :String) ->String{
    return "hello,\(name)"
}
sayHello(toName: "kite")

此时调用sayHello时,需要制定外部参数名。

如果一个函数不止一个参数的话,swift认会将第二个以及后面的所有参数的形参指定为外部参数名,例如

func add(num1 :Int,num2 :Int) ->Int{
    return num1+num2
}
add(1,num2: 2)

func add(num1 :Int,num2 :Int,num3 :Int) ->Int{
    return num1+num2+num3
}
add(1,num2: 2,num3: 3)

如果你不喜欢这种认的外部参数,也可以在形参前面加上一个下划线,中间用空格隔开,这样就告诉swift我这个参数不需要认的外部参数。

func add(num1 :Int,_ num2 :Int,_ num3 :Int) ->Int{
    return num1+num2+num3
}

add(1,2,3)

参数认值

swift允许为函数的参数设置认值,这样的话,调用函数时可以不提供该参数。设置认值的方法是在参数的类型后面加上等号并加上认值。

func sayHello(toName name :String,greetingContent content :String = "hello") ->String{
    return content+","+name
}

print(sayHello(toName: "kite"))
print(sayHello(toName: "kite",greetingContent: "hi"))

上面的代码输出

hello,kite
hi,kite

可变形参

一个可变形参可以接受0个或多个输入作为函数的参数。传递至可变形参的值在函数主体内是以适当类型的数组存在的。

func add(numbers :Int...) -> Int{
    var total = 0
    for item in numbers{
        total+=item
    }
    return total
} //参数的数量可以是0个到多个
add()
add(1,3)
add(1,3,4,5)

inout参数

正常情况下,当一个值类型的变量被作为形参传递给一个函数时,无论该变量在函数体内如何被复制,这个变量原来的值是不受影响的。如果你希望这个形参的值能够保留,则可以将其定义为inout参数,在形参前面加上inout关键字即可。下面定义一个交换值的函数,参数传递进去之后,形参的变化将被保留。

func swapTwoInts(inout a: Int,inout b: Int) {
    let temporaryA = a
    a=b
    b = temporaryA
}

var a=1,b=2
swap(&a,&b)
print("a=\(a),b=\(b)")

以上代码输出结果为

a=2,b=1

注意,调用含有inout参数的函数时,inout参数的前面要加上&符号。

函数类型

函数是有类型的!既然有类型,就能够声明该类型的变量和常量。例如

func sayHello(name :String) ->String{
    return "hello,\(name)"
}

func sayHi(name :String) ->String{
    return "hi,\(name)"
}

这两个函数的类型都是为(String)->(String)

函数类型也像一般类型一样,可以声明常量和变量。先声明两个函数

var myFunc :(String)->(String) = sayHello
print(myFunc("kite"))
myFunc=sayHi
print(myFunc("kite"))

上面代码中的myFunc就是(String)->(String)类型的函数变量,函数的变量也可以像函数一样调用函数类型也同样支持类型推测,所以,在声明myFunc时如果直接赋值的话,也可以不指定类型如下:

var myFunc = sayHello

最后,函数还可以被作为另一个函数的参数或者返回值,我就不举例子了,读者自己发挥吧

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...