美文网首页
Swift 函数

Swift 函数

作者: kimedison | 来源:发表于2019-07-23 15:45 被阅读0次

函数定义

函数的定义包括必要的 func 关键字以及函数名,可选带有参数以及返回值。其中参数可选带有 参数标签,即:

func name(paramLabel paramName: paramType){ statement }

其中参数标签可以省略,上式可以改写成:

func name(paramName: paramType){ statement }

注意:省略了参数标签则默认使用 参数名(paramName) 当做参数标签

// 无参数,无返回值
func name0() {
    
}

// 无参数,有返回值
func name1() -> Int {
    
    return 0
}

// 有参数,无返回值
func name2(parm0:Int, parm1:String) {
    
}

// 有参数,有返回值
func name3(parm0:Int, parm1:String) -> Int {
    
    return 0
}

// 不省略参数标签
func name4(paramLabel paramName: Int) {
    
}

函数调用传参

格式为:

函数名(参数1标签 : 参数1的值, 参数2标签: 参数2的值)

let b = name3(parm0: 0, parm1: "hello")

上面的代码使用了默认的参数标签,即参数名 parm0

如果不想要参数标签,则在定义的时候需在参数标签显式定义为 _

func name5(_ parm0:Int, _ parm1:String, parm2:Int) {
    
}

name5(0, "dude", parm2: 1)

这样 parm0parm1 在调用的时候都不需要参数标签,直接传入参数值即可。

参数默认值

有的时候,希望调用方法的时候不传值也会有一个默认值,这时候只需要定义函数时候在该参数后面加上 =默认值 即可

func adoptPet(pet: String = "cat") {
    
    print("Adopt \(pet) success!")
}

adoptPet(pet: "dog")
adoptPet() // 不传参数,则默认是 cat

输出:

Adopt dog success!
Adopt cat success!

不定参数(可变参数)

不定参数是指 已知参数的类型,但是不确定参数的个数

在参数类型后加 ... 来表示

func GreaterThan5(numbers: Int...) {
    
    for number in numbers {
        if (number > 5) {
            print("\(number)")
        }
    }
}

调用和一般传参一样,但是使用 , 隔开多个参数

GreaterThan5(numbers: 0, 1, 2, 4, 5, 6, 7)

输出

6
7

函数重载

函数重载的定义: 函数名相同,参数不同

这里的 参数不同,理解为: 参数名不同可以类型相同是参数不同,参数名相同类型不同也是参数不同

func initialize() {
    
}

func initialize(parm: Int) {
    
}

func initialize(parm_another: Int) {
    
}

func initialize(parm: String) {
    
}

引申:
但是在 OC 中却不可以函数重载,因为 OC 中是使用 @selector 去寻找方法的,即 - (void)func:(int)a- (void)func:(NSString *)b 都是 @selector(func:)。因此指向的是同一个。

函数多态 (重写)

Swift 中使用 override 来重写父类函数,实现多态

class AClass {
    
    func name0() {
        print("a")
    }
}

class BClass: AClass {
    
    override func name0() {
        print("b")
    }
}

let aIns = AClass()
aIns.name0()

let bIns = BClass()
bIns.name0()

输出

a
b

传递引用参数 (函数内部修改外部变量的值)

在函数内部的作用域中修改参数,只在函数内部修改有效,当函数返回之后,该形参实际上还是原来的值。

实际上我们无法模拟在函数中修改形参的值,因为,Swift 中的形参是不可变的,相当于是使用 let 声明的一个变量。

如果说我们要实现在函数内部去修改这个值,使函数在返回后修改依然有效,则需要将该参数的地址传入,使用 inout 关键字

func add1(num: inout Int) {
    
    num += 1
    
}

注意 inout 是放在类型 Int 前面的,类似 C 中的 *int,表达的意思是:num 这个参数是一个地址,指向的区域存着一个 Int 类型的东西

但是在函数的内部取值则不需要像 C 一样使用 *num,直接使用 num 即可,得益于编译器优化。

调用的时候使用 & 传递该变量的地址即可:

var a = 0
add1(num: &a)
print("Outside: \(a)")

输出

Outside: 1

相关文章

  • Swift学习笔记(二)

    Swift函数 Swift函数包含参数类型和返回值类型 函数定义 Swift使用关键字func定义函数。 函数定义...

  • Swift中的标准函数

    Swift中的标准函数 Swift中的标准函数

  • Swift の 函数式编程

    Swift の 函数式编程 Swift の 函数式编程

  • 10.函数(function)

    函数 kotlin_函数 swift_函数

  • swift 函数

    Swift 函数 函数声明: 告诉编译器函数的名字,返回类型及参数。 函数定义: 提供了函数的实体。Swift 函...

  • swift学习笔记②

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

  • #6 函数

    swift functions - 极客学院 swift的函数和JS的函数基本类似,有几点不同的是: swift中...

  • iOS知识点-9.Swift 是面向对象还是函数式的编程语言?

    Swift Basics Swift 是面向对象还是函数式的编程语言? Swift既是面向对象的,又是函数式的编程...

  • Swift高阶函数解析

    一、锲子 最近在学习Swift过程中发现,Swift有不少高阶函数,这些函数为Swift支持函数式编程范式提供了强...

  • swift 临时

    //// ViewController.swift// Swift01_函数//// Created by ...

网友评论

      本文标题:Swift 函数

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