美文网首页
swift func 的参数修饰

swift func 的参数修饰

作者: ikonan | 来源:发表于2018-08-07 13:52 被阅读113次

在声明一个 Swift 的方法的时候,我们一般不去指定参数前面的修饰符,而是直接声明参数:

func incrementor(variable: Int) -> Int {
        return variable + 1
    }
}

这个方法接受一个 Int 的输入,然后通过将这个输入加 1,返回一个新的比输入大 1 的 Int。嘛,就是一个简单的 +1器。

如果我们想要对增加后的变量做点什么,又不想引入一个新的变量的话,很可能会写出这样的代码:

这是错误代码

func incrementor(variable: Int) -> Int {
   variable += 1
   print(variable)
   return variable
}

残念..编译错误。为什么在 Swift 里这样都不行呢?答案是因为 Swift 其实是一门讨厌变化的语言。所有有可能的地方,都被默认认为是不可变的,不能重新赋值这是理所当然的。现在我们如果想只在函数内部对这样的输入值进行修改的话,只能显式地在函数内部进行使用 var 进行赋值以后再操作了:

func incrementor(variable: Int) -> Int {
    var num = variable;
    num += 1
    return num
}

有些时候我们会希望在方法内部直接修改输入的值,这时候我们可以使用 inout 来对参数进行修饰:

func incrementor(variable:inout Int)  {
    variable += 1
}

因为在函数内部就更改了值,所以也不需要返回了。调用也要改变为相应的形式,在前面加上 & 符号:

var luckyNumber = 7
incrementor(variable: &luckyNumber)

print(luckyNumber)
//luckyNumber = 8

如果你对 Swift 的值类型和引用类型的区别有所了解的话,会知道 Int 其实是一个值类型,我们并不能直接修改它的地址来让它指向新的值。那么这里这种类似 C 中取地址的 & 符号到底做了额什么?对于值类型来说,inout 相当于在函数内部创建了一个新的值,然后在函数返回时将这个值赋给 & 修饰的变量,这与引用类型的行为是不同的。在关于值类型和引用类型一节中我们还会看到两者更多的区别。

最后,要注意的是参数的修饰是具有传递限制的,就是说对于跨越层级的调用,我们需要保证同一参数的修饰是统一的。举个例子,比如我们想扩展一下上面的方法,实现一个可以累加任意数字的 +N器 的话,可以写成这样:

func makeIncrementor(addNumber:Int) -> ((inout Int) -> ()) {
    func incrementor(variable:inout Int) -> ()  {
        variable += addNumber
    }
    return incrementor;
}

外层的 makeIncrementor 的返回里也需要在参数的类型前面明确指出修饰词,以符合内部的定义,否则将无法编译通过。

相关文章

  • swift func 的参数修饰

    在声明一个 Swift 的方法的时候,我们一般不去指定参数前面的修饰符,而是直接声明参数: 这个方法接受一个 In...

  • 第六章 函数

    与c++不同,swift的函数参数更加啰嗦,完整的参数包含参数标签、参数名称、参数类型组成。 func someF...

  • 自学Swift之方法声明

    在 Swift 中声明方法的关键字 是 func 函数的声明没有参数,没有返回值 func sayHello(){...

  • Swift中的方法

    1、func的参数修饰2、default参数3、可变参数函数4、方法嵌套5、Selector6、实例方法的动态调用...

  • 无标题文章

    swift 语法 1.inout() 希望传入参数通过函数改变 func swapTwoInts( a:Int, ...

  • Swift学习笔记(二)

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

  • 10.swift5-常见语法及内存管理

    常见语法 参数 Swift中带参数的函数的一般写法是这样的: func someFunction(firstPar...

  • swift--函数

    1.函数基本写法: swift里面的函数就相当于是oc里面的方法,以func开头 事例: func 函数名 (参数...

  • 函数

    函数 swift里的函数就是OC里的方法 格式:func:关键字,多个参数之间用,分隔,也可以没有参数(->)指向...

  • swift3学习笔记:final

    final Swift中,final关键字可以在class、func和var前修饰。类或者方法的功能确实已经完备了...

网友评论

      本文标题:swift func 的参数修饰

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