使用Swift为输入参数添加默认值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Swift为输入参数添加默认值相关的知识,希望对你有一定的参考价值。

在Swift 2中,可以执行以下操作:

class SomeType {
    static let singletonInstance = SomeType()

    func someFunction(var mutableParameter: SomeType = SomeType.singletonInstance) {
        ...
    }
}

但是在Swift 3中,var关键字将被移除以用于函数参数而有利于inout。我使用inout关键字无法获得与上述相同的结果。

class SomeType {
        static let singletonInstance = SomeType()

        func someFunction(inout mutableParameter: SomeType = SomeType.singletonInstance) {
            ...
        }
    }

相反,我收到一个错误“类型'SomeType'的默认参数值无法转换为类型'inout SomeType'”

我的问题是,是否可以使用默认值的inout

答案

您所谈论的两个关键词inoutvar非常不同。

来自Apple Documentation

In-out参数传递如下:

  1. 调用该函数时,将复制参数的值。
  2. 在函数体中,复制了副本。
  3. 函数返回时,副本的值将分配给原始参数。

因此,您无法为inout参数指定默认值,因为它会使inout属性完全无用。

你可以做的是接收带有默认值的普通(常量)参数,并以这种方式声明一个具有相同名称的新var(来自Swift Evolution's Removing var from Function Parameters Proposal的代码,添加了默认参数):

func foo(i: Int = 5) {
    var i = i
    // now you can change i as you'd like
}
另一答案

任何需要默认inout参数的人都可以考虑这样的解决方案:

class SomeType {
    static let singletonInstance = SomeType()

    func someFunction(inout mutableParameter: SomeType) {
        ...
    }

    // Declare function without 'mutableParameter':
    func someFunction() {
        someFunction(SomeType.singletonInstance)
    }
}

为参数指定默认值时,Swift编译器会自动为您生成不带参数的函数。在这个解决方案中,我们手动完成。

以上是关于使用Swift为输入参数添加默认值的主要内容,如果未能解决你的问题,请参考以下文章

Swift 学习- 07 -- 函数

如何添加到当前存储在用户默认值 Swift 4 中的数字

如何使用 Swift 使用此代码片段为 iOS 应用程序初始化 SDK?

Swift 官方文档中文版: 函数

Swift 将值添加到现有用户默认值

从使用 wkwebview 返回值的 javascript 调用 swift 函数