gpt4 book ai didi

swift - 如何跨不同的实例共享一个对象的状态?

转载 作者:行者123 更新时间:2023-11-28 13:45:17 26 4
gpt4 key购买 nike

,我正在努力提高我的开发技能并遇到了一些困难。我在 SwiftBySundell.com 上阅读了有关 Swift 中的观察者的信息,现在想改进我目前正在开发的应用程序。

该应用程序很简单:您按下一个按钮,时间戳就会保存到 CoreData 数据库中。

所以我得到了一个带有按钮的 View 和一个具有某些功能的模型。在我看来,当按下按钮时,我的模型 (TimeMachine) 的状态应该从 .idle 变为 .started。

我在下面添加了一些代码,说明如何实现此 w.o.观察员。

现在,虽然 Sundell 正在解释我必须做些什么来实现观察者(以大约 4 种不同的方式),但我似乎对实际发生的事情缺少一些理解。

特别是当我想创建一个新 View 时,这也会创建一个 TimeMachine 实例。 (这不是方法吗?我应该将对象传递给 View 而不是创建一个新对象吗?)

总结一下我的问题:如何在我的 View 中最好地共享我的 TimeMachine 状态?并且即使有观察者,他们是否只在类的同一个实例上工作?

编辑:我确实知道对象是什么并且两个实例是不同的。但是,是否有可能创建一个静态变量?我只是想弄清楚做事的正确方法。

每次我跳到下一个 View 时,我真的必须传递 tM 吗?

import Foundation

class TimeMachine {
var state = State.idle {
didSet { stateDidChange() }
}

func stateDidChange() {
print("The State is now \(state)")
}

enum State{
case idle
case started
case paused
}
}

let tM = TimeMachine()
let tM2 = TimeMachine()

tM.state = .idle
//The State is now idle
tM.state = .started
//The State is now started

print("tM2 State is: \(tM2.state)")
//tM2 State is: idle

最佳答案

您似乎忽略了引用的全部概念。您有某个类的两个不同实例。当您在第一个实例上设置属性时,您不能期望第二个实例将被称为某个属性的观察者。这些实例没有任何共同之处。

由于类是引用类型,您可以在 View 中传递相同 TimeMachine 实例的引用。您可以使用方法、闭包、变量……

所以,你需要相同的实例

let tM = TimeMachine()
tM.state = .started // prints "The State is now \(state)"

关于swift - 如何跨不同的实例共享一个对象的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55476508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com