假設我已經多載了這樣的 Swift 方法
func someValue<T> ( _ name: PropertyName ) -> T? {
// ...
}
func someValue ( _ name: PropertyName ) -> URL? {
// ...
}
我可以這樣呼叫這個方法
let u = o.someValue("propA")
并且u將是URL?. 或者我也可以這樣稱呼
let i: Int? = o.someValue("propB")
let s: String? = o.someValue("propC")
并且i將會Int?并且s將會是String?。
但是如何在不將其分配給變數的情況下使用此方法呼叫的結果?例如,我想for在switch陳述句中使用它回圈或更簡單:
switch o.someValue("propB") {
此呼叫將假設結果為URL?:
switch o.someValue("propB") as? Int {
有人告訴我URL?不能強制轉換為Int,這是正確的。但是URL?意味著首先已經呼叫了錯誤的方法。
更新
這是一個最小的測驗用例,因為我不能在這里發布原始代碼。
https://swiftfiddle.com/srkys22vofdqlpl2sglnfs4q5u
uj5u.com熱心網友回復:
switch o.someValue("propB") as Int? {
和
switch o.someValue("propB") as URL? {
作業正常。你說錯了
不起作用
你也可以消除歧義
(o.someValue as (_ name: PropertyName) -> Int?)("propB")
(o.someValue as (_ name: PropertyName) -> URL?)("propB")
......雖然你不應該這樣做。
uj5u.com熱心網友回復:
switch o.someValue("propB") as? Int {
將無法作業,因為編譯器將其解釋為
(switch o.someValue("propB")) as? Int {
在這種情況下,URL?回傳方法獲勝,這是最具體的多載,然后案例將失敗,因為URL?不能被案例Int。
然后指出,正確的代碼需要
switch o.someValue("propB") as Int? {
請注意問號是如何移動到這里的唯一東西。現在演員陣容也可以匹配通用版本。Jessy 回答的第一行基本上暗示了這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/375637.html
上一篇:在Sorter類中嚴格使用泛型
