斯威夫特:不能在自己中分配给""

kes*_*hav 18 swift

在Swift中,我有一个名为的计算属性managedObjectContext: NSManagedObjectContext.当我尝试初始化它时:

var managedObjectContext: NSManagedObjectContext? {
    get {
        createManagedObjectContext()
        return self.managedObjectContext
    }
    set(newManagedObjectContext) {
        self.manageObjectContext = newManagedObjectContext
    }
}

func createManagedObjectContext() -> NSManagedObjectContext {

    if let coordinator = persistentStorageCoordinator() as NSPersistentStoreCoordinator!
    {
        self.managedObjectContext = NSManagedObjectContext()
        self.managedObjectContext!.persistentStoreCoordinator = coordinator

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleBackgroundMOCDidSaveNotification:", name: NSManagedObjectContextDidSaveNotification, object: self.managedObjectContext)
    }

    return self.managedObjectContext!;
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误说:Cannot assign to "managedObjectContext" in self.

任何人都可以帮忙解决这个问题吗?

提前致谢.

Seb*_*ddd 37

当您尝试将值分配给let常量时,也会收到此编译错误.var在这种情况下,更改变量的类型应解决它.


Ste*_*sen 8

惰性存储属性(请参阅Swift编程语言手册,第313页)更适合您在此处尝试执行的操作.

lazy var managedObjectContext = createManagedObjectContext()
Run Code Online (Sandbox Code Playgroud)

createManagedObjectContext() 在您第一次尝试访问该属性(并且仅在第一次)时才会调用.


Pau*_*w11 1

您的问题是,您正在使用计算属性,就好像它是标准属性一样,您实际上是在尝试递归调用 setter 。您不需要在这里使用计算属性,只需使用标准属性 -

\n\n
var managedObjectContext: NSManagedObjectContext?\n
Run Code Online (Sandbox Code Playgroud)\n\n

计算属性是一种在需要时根据其他属性计算其值的属性 - 例如Swift 编程语言中的“center”属性中的“center”属性-

\n\n
var center: Point {\n    get {\n        let centerX = origin.x + (size.width / 2)\n        let centerY = origin.y + (size.height / 2)\n        return Point(x: centerX, y: centerY)\n    }\n    set(newCenter) {\n        origin.x = newCenter.x - (size.width / 2)\n        origin.y = newCenter.y - (size.height / 2)\n    }\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n

摘自:Apple Inc.\xe2\x80\x9cThe Swift 编程语言。\xe2\x80\x9d iBooks。https://itunes.apple.com/au/book/swift-programming-language/id881256329?mt=11

\n\n

中心由原点和大小决定,设置中心会影响原点

\n