[英]How to compare instances of protocols and instances of classes
我有一個協議:
protocol MasterGame {}
和一個產生單例的類
class MasterGameImp : MasterGame {
static let sharedInstance = MasterGameImp()
}
現在,我有了另一個依賴於協議並具有由其實例化程序注入的屬性的對象。
class MyGameObject {
var masterGame: MasterGame?
}
我想編寫一個單元測試來測試單例是否已正確注入MyGameObject實例中。 什么是正確的方法? ===
不接受MasterGame和MasterGameImp類型的參數。 因此,顯然您不能以這種方式檢查協議和類之間的相同性。 因此,我需要另一種方法來檢查單例和存儲屬性之間的一致性。 謝謝!
大大簡化了以下問題:
protocol P {
}
class X : P {
}
let x = X()
let p : P = x
print(x === p)
二進制運算符
===
不能應用於類型'X'和'P'的操作數
print((x as P) === p)
二進制運算符
===
不能應用於兩個'P'操作數
print(x === (p as! X))
正確 ->工作
您所要做的就是將協議升級為其實現,這實際上一點都不漂亮:/
我沒有找到更好的解決方案,它與swift處理不同於常規類繼承的協議有關。 更改為class P
將導致以上所有三個語句成功。
正如@matt所指出的,如果您錯誤地提供了一個錯誤的p(實際上不是X
那么代碼當然會崩潰。 要解決該問題,您應該將支票包裝為if條件:
if let xp = p as? X {
print(x === xp)
} else {
print("p is not of type X")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.