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

相關問題