0
我在协议扩展中创建了一个私有变量,并使用它来获取对象的一个实例。在协议中调用的属性getter被调用的次数超过所需的次数
即使我打过一次电话,该吸气剂被调用两次。我准备了一个游乐场来表明这一点。
下面是代码:
class LoggingService {
func sayWorld() {
print("world")
}
}
protocol LoggerType {
func sayWorld()
}
extension LoggerType {
private var loggerInstance: LoggingService {
print("init")
return LoggingService()
}
func sayWorld() {
self.loggerInstance.sayWorld()
}
}
class ViewMock: LoggerType {
init() {
}
}
let viewObj = ViewMock()
viewObj.sayWorld()
看一看运行操场
需要一些解释到这种行为。
调试怪异的第一步操场上的Swift行为不使用操场。在编译的项目中,只能按预期访问一次getter。 – Hamish
@哈米什谢谢你的回应。事实确实如此。我不知道苹果为什么会这么做。 – kerry
如果我不得不猜测,我会说这是因为游乐场正在执行'loggedInstance'一段时间,以便在右边的边栏中显示它的描述。您可以将其更改为'_ = self.loggerInstance.sayWorld()',以便侧栏显示表达式的无效结果,您将看到它只被调用一次。 – dan