我的印象是,swift可能重載的方法僅在方法返回的對象類型上有所不同。我認爲我可以使用兩個具有相同簽名的funcs,但它們在返回類型上有所不同。重載方法,其中只有差異是可選與非可選類型
import Foundation
// ambiguous use of 'IsTextEmpty(text:)'
func IsTextEmpty(text : String?) -> Bool? {
return text?.isEmpty
}
func IsTextEmpty(text : String?) -> Bool {
guard let text = text else {
return true
}
return text.isEmpty
}
let text: String? = nil
if let empty = IsTextEmpty(text:"text") {
print("Not Empty")
}
if IsTextEmpty(text: text) {
print("Empty")
}
在這裏,這兩個函數具有相同的輸入參數,但一個FUNC返回一個可選Bool?
,另一個返回一個Bool
。在這種情況下,我得到一個錯誤:
ambiguous use of 'IsTextEmpty(text:)'
如果我改變了一個輸入參數的名字,我不再得到明確的錯誤:
// Works
func IsTextEmpty(foo : String?) -> Bool? {
return foo?.isEmpty
}
func IsTextEmpty(text : String?) -> Bool {
guard let text = text else {
return true
}
return text.isEmpty
}
let text: String? = nil
if let empty = IsTextEmpty(foo:"text") {
print("Not Empty")
}
if IsTextEmpty(text: text) {
print("Empty")
}
不應該編譯器檢測到它們是兩種截然不同的方法,即使它們的返回類型不同,因爲可選Bool?
與非可選Bool
是不同的類型?
在同一方法名的情況下,只有返回類型不同,編譯器韓元無法區分。正如你可以讓'abc = IsTextEmpty(text:「text」)'爲可選返回和非可選返回。你如何看待,編譯器將能夠挑選出一種方法。 – Aks