Swift 我的学习笔记 - 07: 函数

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,因此绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考html

如下仍是有不少没看懂、不肯定的地方,我会以“存疑”的注解指出。编程

在此感谢中文版翻译者,这极大地加快了 Swift 的学习速度。swift

本文地址:http://www.javashuo.com/article/p-ugbvcxff-hp.htmlsegmentfault


Reference:

原版:The Swift Programming Language
中文版:Swift 3 编程语言 - 函数app

函数的基本知识在序言已经讲了,这里不重复。只是提一下少数进阶的功能。编程语言

可选返回类型

若是一个函数的返回值的任一部分有多是 nil,那么须要加上问号。好比:函数

func someFunc (array: [Int]) -> (min: Int, max: Int)? {
        ...
    }

注意 (Int, Int)?(Int?, Int?) 的含义是不一样的。学习

形参和实参

在 C 里面,一个函数在声明的时候,能够只声明函数参数的类型,而不声明其名字。另外,也能够在声明的时候为参数指定名字,使得语义更加明确。而在函数实际使用(定义)的时候,你能够从新命名相应的参数名,便于实际的函数实现。在 Swift 中也支持这样的写法。ui

Swift 的声明和定义其实是在一起的,因此你须要在定义的时候同时指定形式参数和实际参数。每个参数按照 “形式参数 实际参数: 类型” 的格式来写。若是形式参数是空的,那么就用 “_” 表示。这样便于 IDE 识别。spa

好比有如下几个写法:

// 彻底没有形式参数,很是的 C-style
    func isLeftGreaterThanRight(_ left: Int, _ right: Int) -> Bool {...}
    
    // 这个例子我以为能够说明形参和实参的区别所在,是否是很像 Objective-C 的方法名?
    func isNumber(_ left: Int, greaterThan right: Int) -> Bool {...}
    
    // 或者所有定义彻底,我的以为这个定义比较疯狂……
    func check(number left: Int, isGreaterThan right: Int) -> Bool {...}

可变参数

Swift 中的可变参数和 C 不同。C 的可变参数常常用于实现字符串填充功能(其实理论上是能够作更多)。
可是 Swift 里的可变参数实际上只是一个语法糖而已,其做用是将多个同类型的参数帮你拼接成 Array 类型做为参数。使用 “...” 表示可变参数。好比:

func sum (numbers: Double) -> Double {
        var ret = 0.0
        for eachNum in numbers {
            ret += eachNum
        }
        return ret
    }

“输入输出” 形式参数

这里相似于 C 里面讲到指针时的地址引用,使用的也是相同的例子:

func swap (_ a: inout Int, _ b: inout Int) {
        let temp = a
        a = b
        b = temp
    }

注意上面的 inout 关键字。调用的方法是:swap(&numA, &numB),是否是很像 C 里的取地址?

变量类型:“函数”

就像 C 同样,函数也能够成为一个变量类型。Swift 由于没有函数指针的概念,因此函数类型的定义实际上变得很明确。
好比函数 func someFunc(_ a: Int, _ b: Int) -> Int{...} 的类型就是 (Int, Int) -> Int。这就是一个数据类型了,称为 “函数类型”,能够用来定义变量!好比:

var someFuncVal : (Int, Int) -> Int = someFunc

调用的方式是:someFuncVal(1, 2),比 C 里还要纠结 “*” 号好多了!
函数类型的变量也可能用来做为函数变量或者是函数返回值,这个时候就会出现不少个 “->”。这里就不展开了,我隐约嗅到了混乱 Swift 的味道……

函数内嵌

函数的内部能够再定义一个函数,有点像 Objective-C 里面的 “代码块” 的做用。这里也很好理解,不展开

相关文章
相关标签/搜索