美文网首页
swift语法记录-之函数

swift语法记录-之函数

作者: LiuffSunny | 来源:发表于2020-04-14 23:01 被阅读0次

函数

image.png
无参最简单的写法
    func sayHello() {
        print("say hello")
    }

隐式返回

此时可以省略return 如果不仅仅只有表达式还有其他的代码就不能省略return
    func sum(v1: Int,v2: Int) -> Int {
        v1 + v2
    }

返回元组,实现多返回值

func caclulate(v1: Int,v2: Int) -> (sum: Int,minus: Int,average: Int) {
    let sum = v1 + v2
    return(sum,v1 - v2,sum>>1)
}
let result = caclulate(v1: 20, v2: 10)
result.sum// 30
result.minus // 10
result.average // 15

函数的文档注释

一定要注意格式

/// 求和
///
/// 求两个参数的和
///
/// - Parameter v1:第一个参数
/// - Parameter v2:第二个参数
/// - Returns: 两个参数相加
///
/// Note 可以传递两个正整数
func sum(v1 :Int ,v2: Int) ->Int {
    return v1 + v2
}

按option键就会出现如下所示:


image.png

参数标签

v1和v2就是参数标签
// 参数标签

func gotoWork(at time:String) {
    print("gotowork at\(time)")
}
gotoWork(at: "09:00")
// at作为一个标签 可以起到容易理解的作用
func sum1(_ v1 :Int ,_ v2: Int) ->Int {
    return v1 + v2
}
sum1(10, 20)
//_可以省略函数标签,但是一般不推荐,让别人引用起来方便易懂会更友好

默认参数值(Default parameter value)

image.png

可变参数

image.png

swift自带的print函数

public func print(_ items: Any..., separator: String = " ", terminator: String = "\n")
//第一个参数,任何类型的可变参数
// 第二个参数,默认分隔符是空格,可以自定义分隔符
// 第三个参数,最后默认是换行符,也可以替换成别的
print("1","2","3",separator:"-",terminator:"")//1-2-3
print("1","2","3",terminator:"...")//1 2 3...

输入输出参数

image.png
由于函数的默认参数都是常量let,所以上述代码是会报错的,就算它是var也不可能修改外部变量number的值,所以引进了输入输出参数inout
var number = 10
func add(_ num: inout Int) {
    num = 20
}
add(&number)
print("number\(number)")//number 20
// 这样就能做到在函数内部,修改外部变量的值

注意点:1.可变参数不能用inout修饰,(Int...这种可变参数)
2.inout参数不能有默认值
3.inout参数的本质是地址传递(引用传递)看汇编lea指令是地址传递的意思,且后面不再有mov指令
4.inout参数只能传入可以多次赋值的字面量和let都不允许,因为不可以被多次改变

var v1 = 30
var v2 = 40
// 区分系统交换方法swap
func swapvalue(_ v1: inout Int,_ v2: inout Int) {
    let temp = v1
    v1 = v2
    v2 = temp
}
swapvalue(&v1, &v2)
print(v1,v2)// 40 30
// 使用元组来实现交换
func swapva(_ v1: inout Int,_ v2: inout Int){
    (v1,v2) = (v2,v1)
}
swapvalue(&v1, &v2)
print(v1,v2)// 30 40

函数重载

1.参数个数或参数类型或参数标签名三者不同会构成函数重载


image.png

内联函数(InLine Function)

如果开启了编译器优化(release模式默认开启优化),编译器会自动将某些函数变成内联函数如图所示:

image.png
内联函数 会将函数调用展开成函数体.正常函数调用,涉及到申请栈空间
image.png

函数类型

image.png

1.函数类型作为返回参数


image.png

2.函数类型作为成员变量

class Preson {
    var age: Int// 成员变量Int类型
    var fn: () -> () // 成员变量 函数类型
}

3.函数类型作为返回值


image.png

typealias

image.png
// void的定义就是个空元组 用到了 别名
public typealias Void = ()

@inline(了解即可)

image.png

嵌套函数(Nested Function)

image.png

相关文章

  • swift语法记录-之函数

    函数 隐式返回 返回元组,实现多返回值 函数的文档注释 一定要注意格式 按option键就会出现如下所示: 参数标...

  • Swift基本语法之函数

    Swift基本语法之初体验-常量变量-数据类型 Swift基本语法之逻辑分支 Swift基本语法之循环 Swift...

  • Swift基本语法之数组和字典

    Swift基本语法之初体验-常量变量-数据类型 Swift基本语法之逻辑分支 Swift基本语法之循环 Swift...

  • Swift基本语法之元组和可选类型

    Swift基本语法之初体验-常量变量-数据类型 Swift基本语法之逻辑分支 Swift基本语法之循环 Swift...

  • Swift基本语法之闭包

    Swift基本语法之初体验-常量变量-数据类型 Swift基本语法之逻辑分支 Swift基本语法之循环 Swift...

  • Swift语法之函数

    多重返回值函数 你可以用元组(tuple)类型让多个值作为一个复合值从函数中返回。 下例中定义了一个名为 minM...

  • Swift最新语法总结

    swift最新语法总结(函数) swift最新语法总结(枚举类型与结构体) swift最新语法总结(类的使用) s...

  • swift学习笔记②

    Swift学习笔记 - 文集 语法篇 一、函数 函数定义 Swift 定义函数使用关键字 func,functio...

  • Swift基本语法之字符串

    Swift基本语法之初体验-常量变量-数据类型 Swift基本语法之逻辑分支 Swift基本语法之循环 字符串的介...

  • Swift基本语法之函数

    简单函数 无返回值类型的函数 无参数函数 多个返回值的函数

网友评论

      本文标题:swift语法记录-之函数

      本文链接:https://www.haomeiwen.com/subject/cddomhtx.html