我有一个协议:
protocol MasterGame {}
和一个产生单身的类
class MasterGameImp : MasterGame {
static let sharedInstance = MasterGameImp()
}
现在我有另一个依赖于协议的对象,并且具有由它的实例化器注入的属性。
class MyGameObject {
var masterGame: MasterGame?
}
我想编写一个单元测试来测试单例是否正确地注入到MyGameObject的一个实例中。这样做的正确方法是什么? ===
不接受MasterGame和MasterGameImp类型的参数。显然,你无法在协议和类之间检查同一性。所以我需要另一种方法来检查单例和存储属性之间的相同性。谢谢!
答案 0 :(得分:2)
非常简化的问题如下:
svg.append("text")
.attr("x", 295)
.attr("y", 30)
.attr("text-anchor", "middle")
.style("font-size", "16px")
.style("text-decoration", "underline")
.text("Value vs Date Graph");
二进制运算符
protocol P { } class X : P { } let x = X() let p : P = x print(x === p)
不能应用于“X”和“P”类型的操作数
===
二进制运算符
print((x as P) === p)
不能应用于两个“P”操作数
===
true - >工作
你需要做的是将协议转发到它的实现,这实际上并不完美:/
我没有找到更好的解决方案,它有一些关于swift如何处理与常规类继承不同的协议。更改为print(x === (p as! X))
将导致上述所有三个语句都成功。
正如@matt所指出的那样,如果你错误地提供了错误的p,那么代码当然会崩溃,而p实际上并不是class P
。要解决该问题,您应该将支票包装成if条件:
X