[英]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.