3
似乎荒謬,這種方法的簽名不斯威夫特4編譯:爲什麼Where子句只對具有泛型參數的函數有效?
class Bar<ValueType> {
func version() throws -> String where ValueType == [String: Any] { ... }
}
(錯誤:WHERE子句不能連接到非通用聲明)
但這編譯罰款:
class Bar<ValueType> {
func version<T>(_ foo: T? = nil) throws -> String where ValueType == [String: Any] { ... }
}
任何人都知道爲什麼會出現這種情況?
限制使用where子句是爲了實施最佳實踐而不是編譯器限制嗎? –
@SidMani不,這只是一個意味着什麼類型的聲明體內被發現的功能後果。這意味着函數是一種存在於類型上的方法。你所擁有的不是存在於該類型上的方法。你有一個方法可以*可能存在於這個類型上。 – Alexander
@SidMani規則可以做到這一點,這是可能的,但它將是一個完整的狗屎表演。對於你看到的每一種方法,你都必須檢查相關的where子句來查看該方法是否適用。這可能是大量方法的情況,這些方法全部共享相同的where子句。這是非常雜亂,和不必要的複雜 – Alexander