美文网首页
Swift 函数与闭包

Swift 函数与闭包

作者: 張無忌 | 来源:发表于2017-12-12 14:43 被阅读19次

最简单的函数

首先定义一个简单的函数,这个函数只是输出一个固定的名字。

func printName() {
    print("张三")
}

printName()

向函数传递参数

我们试着将名字定义成参数,调用者可以自己传递需要打印的名字。

func printName(name: String) {
    print(name)
}

printName(name: "张三")

函数参数的两种不同名称

定义一个可以输出名字和年龄的函数。

func printNameAndAge2(name: String, age: Int) {
    print("name: " + name + " age: \(age)")
}

在 Swift 中,函数的参数其实有两个名字,一个叫做argument name,用于内部使用,一个叫做argument label,用于外部调用。例如,定一个可以输出名字和年龄的函数。

func printNameAndAge(hisName name: String, andAge age: Int) {
    print("name: " + name + " age: \(age)")
}

// 调用
printNameAndAge(hisName: "张三", andAge: 22)

很明显,参数hisNameandAgeargument label,用于外部调用。为的是使函数在调用的时候,呈现更好的语义。
参数nameageargument name,用于函数内部使用。为了让函数在实现的时候,呈现更好的实现逻辑

调用时省略函数参数

其实在平时的开发过程中,很少去这样定义函数,一般都是写一个函数外部和内部都通用的名字。例如:

func printNameAndAge(name: String, age: Int) {
    print("name: " + name + " age: \(age)")
}

printNameAndAge(name: "张三", age: 22)

这时,函数的argument label就等同于argument name

也可以再简化下函数,省略掉函数的argument name,例如:

func printNameAndAge(_ name: String, _ age: Int) {
    print("name: " + name + " age: \(age)")
}

printNameAndAge("张三", 22)

因为函数名字已经很清楚得表达了要打印名字和年龄,所以参数可以省略。实际开发中,参数名省略与否要根据函数名是否清晰地表达了它所需的参数来定。

设定默认值

可以为函数的参数设定默认值,我们设置默认的名字为Guest

func printNameAndAge(name: String = "Guest", age: Int) {
    print("name: " + name + " age: \(age)")
}

调用函数时,我们可以看到 Xcode 自动为我们提供了函数的两种调用,可以不传递名字。


可变长的参数

计算所有参数的总和。

func addInt(_ numbers: Int ...) {
    var sum = 0
    numbers.forEach {
        sum += $0
    }
    print(sum)
}

addInt(1, 2, 3)

inout 关键字

在 C 语言时代,我们经常把一个变量带到函数里面去,期望函数把数据加工的结果返回到这个变量里,再带出来供我们使用。例如,计算两个数相加。

func add(x: Int, y: Int, result: Int) {
    result = x + y
}

很可惜,报错了,因为result作为参数,是属于一个常量let。我们需要在参数类型前面加上inout关键字,而且注意在调用的时候,为参数加上取地址符号&。

不过一般是实际开发中,很少这样去用,为函数制定返回值即可,例如:

func add(x: Int, y: Int, result: Int) -> Int {
    return x + y
}

相关文章

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • swift学习笔记 ⑥ —— 闭包

    Swift学习笔记 - 文集 闭包,就是能够读取其他函数内部变量的函数。Swift 中的闭包与 C 和 OC 中的...

  • swift4 闭包

    swift 闭包 闭包:swift 中 函数是闭包的一种类似于oc的闭包闭包表达式(匿名函数) -- 能够捕获上下...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • swift 闭包(闭包表达式、尾随闭包、逃逸闭包、自动闭包)

    闭包是自含的函数代码块,可以在代码中被传递和使用 闭包和swift的对比 Swift 中闭包与OC的 block ...

  • 100 Days of Swift - Day 06 - 闭包(

    100 Days of Swift - Day 06 - 闭包Closures 6.1 闭包 Swift函数也属于...

  • swift中的闭包

    swift中的闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用。swift中的闭包与C和Objective...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • Swift学习:闭包

    本篇将详细总结介绍Swift闭包的用法;闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift中的闭包与C...

  • Swift (一)--闭包

    @[TOC](Swift (一)--闭包) 1. 闭包简介 什么是闭包 闭包就是能够读取其他函数内部变量的函数,可...

网友评论

      本文标题:Swift 函数与闭包

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