如何在另一个实例变量上使用实例变量的属性

时间:2016-08-25 19:54:35

标签: ios swift core-data

使用Core Data时,我们使用AppDelegate获取managedObjectContext,如下所示:

override func viewDidLoad()
{
    super.viewDidLoad()

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedObjectContext = appDelegate.managedObjectContext
}

现在当我从viewDidLoad中删除这两行代码以试图将它们作为实例变量存储在ViewController上时,我收到错误。

问题是我不能使用“appDelegate”,因为它已经是一个实例变量。

我知道我可以通过简单地解决这个问题:

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

然而,我很好奇是否可以将两者都声明为实例变量。我假设这可以使用getter / setter完成,但我不太确定。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

class ViewController: UIViewController {

    var appDelegate:AppDelegate?
    var managedObjectContext:NSManagedObjectContext?

    override func viewDidLoad() {
        super.viewDidLoad()

        appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate
        managedObjectContext = appDelegate?.managedObjectContext
    }

答案 1 :(得分:1)

我必须将appDelegate从常量更改为变量,然后使我的managedObjectContext成为一个惰性变量,以便我可以访问“self”。我还必须包含类型NSManagedObjectContext,如下所示:

var appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
lazy var managedObjectContext: NSManagedObjectContext = self.appDelegate.managedObjectContext