1

考虑下面的方法签名:为什么不使用类型推断在具有多个唯一类型的默认参数的swift函数的情况下进行救援?

func doSomething(_ boolToConsider: Bool = false, _ stringToConsider: String? = nil) 

在以下的错误结果的方式调用此方法:

doSomething("foo") 

error message

为什么不斯威夫特承认,我是打算使用默认的boolToConsider和提供的stringToConsider

+1

您是否尝试过使用函数参数的外部名称?你也可以使用两个函数,一个接收布尔值,第二个字符串,然后使第三个函数为两者都做一些常用的东西 – Woof

回答

1

我不知道为什么Swift的作者不支持它,或者他们曾计划支持它。我可以推测,它会导致相当混乱的代码,通过基于类型的推理来传递参数列表的哪些部分。

你可以重载你的功能。

func doSomething(_ stringToConsider: String) { 
    doSomething(false, stringToConsider) 
} 
0

类型推断不适用于您的示例,因为您的所有外部参数标签均为匿名(_)。给doSomething至少有一个参数标签可以解决这个问题。 enter image description here

2

正如已经提到@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

相关问题