微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift函数

1、函数的定义

/// 方法名 test
/// - Parameter num: 形参,认为 let,只能是 let
///   Void为返回值,当为 Void 时可以省略
func test(num : Int) -> Void {

}

func test(num : Int) -> () {

}

func test(num : Int) {

}

test(num: 0)

//有参数有返回值
func sum(_ num1: Int, _ num2: Int) -> Int {
    return num1 + num2
}
sum(0, 1)
//隐式返回 整个函数体只有单一表达式,函数体会返回这个表达式,省略掉 return
func sum(_ num1: Int, _ num2: Int) -> Int {
    num1 + num2
}

2、利用元组实现多返回值
 

//通过元组实现多个返回值
func calculate(v1: Int, v2: Int) -> (sum: Int, diffrents : Int,average: Int){
    let sum = v1 + v2
    return (sum, v1 - v2, sum >> 1)
}

let cal = calculate(v1: 10, v2: 5)
cal.sum
cal.diffrents 

3、函数的文档注释

4、参数标签

//修改参数标签
func sum(with num1: Int, and num2 : Int) -> Int {
    num1 + num2
}
sum(with: 10, and: 11)

//省略参数标签
func sum(_ num1: Int, _ num2 : Int) -> Int {
    num1 + num2
}

5、设置认参数

//设置认参数值
func sum(num1: Int = 10, str1 : String, num2 : Int) {
}
sum(num1: 1, str1: "", num2: 2)
sum(str1: "1", num2: 2)

6、可变参数

//输入输出参数 inout,可以在函数内部修改外部实参的值
func swapValues(num1: inout Int, num2 : inout Int) {
    let value = num1
    num1 = num2
    num2 = value
}
var num1 = 10
var num2 = 20
swapValues(num1: &num1, num2: &num2)

7、函数重载

函数名相同,参数个数不同 | 参数类型不同 | 参数标签不同 

注:函数返回类型与函数重载无关

func sum(v1: Int, v2: Int) -> Int {
    v1 + v2
}
//参数个数不同
func sum(v1: Int, v2: Int, v3: Int) -> Int {
    v1 + v2 + v3
}
//参数类型不同
func sum(v1: Double, v2: Int) -> Int {
    Int(v1) + v2
}
//参数标签不同
func sum(a num1: Int,b num2: Int) -> Int {
    num1 + num2
}

8、内联函数

函数调用展开成函数

如果开启了编译器优化,编译器会自动将某些函数变成内联函数

@inline func test(){
}
//永远不会被内联,即使开启编译器优化
@inline(never) func test(){
}
//开启编译器优化之后,即使代码很长也会被内联(地轨/动态派发函数除外)
@inline(__always) func test(){
}

9、函数类型

一个函数都是有类型的,函数类型由形参类型和返回值类型确定。

函数类型可以作为函数的参数和函数的返回值

函数类型作为函数返回值的函数称作高阶函数

可以使用 typealias给类型起别名

//swift 中定义 Void 为空元组
public typealias Void = ()

函数嵌套:将函数定义在函数的内部

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐