在VIewControllers - iOS之间共享数据

时间:2015-10-23 05:03:52

标签: ios swift scope singleton

对于创建的任何对象,我通常使用两个两个范围1)Singleton 2){local scope}。我正在寻找介于两者之间的东西。

假设我有一个对象,即5个视图控制器正在编辑。我想在视图控制器之间共享一个对象,而不必在视图控制器之间传递它。但它不应该贯穿整个应用程序,因为一旦我完成了编辑对象,我就不再需要它了。

我不想从另一个类继承所有视图控制器并在那里创建一个变量。由于视图控制器可以重用于不同的对象。我想创建一个在启动第一个视图控制器之前生效的对象,它存在于5个视图控制器的范围内,然后在我保存它之后就死了。无论如何我都可以在iOS中这样做。

2 个答案:

答案 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 {
        ...
    }
}
  1. 在编辑会话中创建私有初始化程序。工厂应该提供共享实例。

  2. 您可以将此类传递给ViewControllers并使用数据进行操作。您可以将其注入或仅在VC或VM中设置为属性。

  3. 如果您已完成编辑,则应结束会话并清除数据或其他内容。