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

问题描述 投票:4回答:2

在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

swift function default-value swift3 inout
2个回答
5
投票

您所谈论的两个关键词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
}

1
投票

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

class SomeType {
    static let singletonInstance = SomeType()

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.