使用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
?
答案
您所谈论的两个关键词inout
和var
非常不同。
In-out
参数传递如下:
- 调用该函数时,将复制参数的值。
- 在函数体中,复制了副本。
- 函数返回时,副本的值将分配给原始参数。
因此,您无法为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为输入参数添加默认值的主要内容,如果未能解决你的问题,请参考以下文章