为什么不使用类型推断在具有多个唯一类型的默认参数的swift函数的情况下进行救援?
问题描述:
考虑下面的方法签名:为什么不使用类型推断在具有多个唯一类型的默认参数的swift函数的情况下进行救援?
func doSomething(_ boolToConsider: Bool = false, _ stringToConsider: String? = nil)
在以下的错误结果的方式调用此方法:
doSomething("foo")
为什么不斯威夫特承认,我是打算使用默认的boolToConsider
和提供的stringToConsider
?
答
我不知道为什么Swift的作者不支持它,或者他们曾计划支持它。我可以推测,它会导致相当混乱的代码,通过基于类型的推理来传递参数列表的哪些部分。
你可以重载你的功能。
func doSomething(_ stringToConsider: String) {
doSomething(false, stringToConsider)
}
答
正如已经提到@Woof你可以完成你想要什么,提供3个不同的方法签名,只有其中的一个,可以有默认值设置的所有参数,否则会抱怨不明确的使用你的方法:
func doSomething(_ bool: Bool) {
print("bool:", bool)
}
func doSomething(_ string: String) {
print("string:", string)
}
func doSomething(_ bool: Bool = false, _ string: String = "") {
print("bool:", bool)
print("string:", string)
}
doSomething(true)
doSomething("foo")
doSomething()
doSomething(true, "foo")
这将打印
doSomething with bool value only
bool: true
doSomething with string value only
string: foo
doSomething with default values
bool: false
string: default
doSomething with default values
bool: true
string: foo
您是否尝试过使用函数参数的外部名称?你也可以使用两个函数,一个接收布尔值,第二个字符串,然后使第三个函数为两者都做一些常用的东西 – Woof