对于创建的任何对象,我通常使用两个两个范围1)Singleton 2){local scope}。我正在寻找介于两者之间的东西。
假设我有一个对象,即5个视图控制器正在编辑。我想在视图控制器之间共享一个对象,而不必在视图控制器之间传递它。但它不应该贯穿整个应用程序,因为一旦我完成了编辑对象,我就不再需要它了。
我不想从另一个类继承所有视图控制器并在那里创建一个变量。由于视图控制器可以重用于不同的对象。我想创建一个在启动第一个视图控制器之前生效的对象,它存在于5个视图控制器的范围内,然后在我保存它之后就死了。无论如何我都可以在iOS中这样做。
答案 0 :(得分:2)
另一种方法是使用您的AppDelegate。在其中,您可以声明一个全局变量而不是2个函数,第一个用于获取当前值,另一个用于设置值。
它可能会提供这样的东西:
// Get AppDelegate instance
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate;
// Use your getter to get the current value
var something = appDelegate.getYourStuff();
// Or use a setter to set it, a modifier to modify oit
appDelegate.setYourStuff(yourStuff);
appDelegate.modifiyYourStuffAttribute(newAttributeValue);
不要意识到这种方法是不是一种坏习惯,但它对我有用。
对其他建议开放!
答案 1 :(得分:0)
class EditingSession {
class Factory {
private static let session = EditingSession() //do it lazy
static func create() -> EditingSession {
return session
}
}
func openSession() {
}
func endSession {
}
func getData () -> AnyObject {
...
}
}
在编辑会话中创建私有初始化程序。工厂应该提供共享实例。
您可以将此类传递给ViewControllers并使用数据进行操作。您可以将其注入或仅在VC或VM中设置为属性。
如果您已完成编辑,则应结束会话并清除数据或其他内容。