考慮下面的方法簽名:爲什麼不使用類型推斷在具有多個唯一類型的默認參數的swift函數的情況下進行救援?
func doSomething(_ boolToConsider: Bool = false, _ stringToConsider: String? = nil)
在以下的錯誤結果的方式調用此方法:
doSomething("foo")
爲什麼不斯威夫特承認,我是打算使用默認的boolToConsider
和提供的stringToConsider
?
考慮下面的方法簽名:爲什麼不使用類型推斷在具有多個唯一類型的默認參數的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