在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
.
任何人都可以帮忙解决这个问题吗?
提前致谢.
惰性存储属性(请参阅Swift编程语言手册,第313页)更适合您在此处尝试执行的操作.
lazy var managedObjectContext = createManagedObjectContext()
Run Code Online (Sandbox Code Playgroud)
createManagedObjectContext()
在您第一次尝试访问该属性(并且仅在第一次)时才会调用.
您的问题是,您正在使用计算属性,就好像它是标准属性一样,您实际上是在尝试递归调用 setter 。您不需要在这里使用计算属性,只需使用标准属性 -
\n\nvar managedObjectContext: NSManagedObjectContext?\n
Run Code Online (Sandbox Code Playgroud)\n\n计算属性是一种在需要时根据其他属性计算其值的属性 - 例如Swift 编程语言中的“center”属性中的“center”属性-
\n\nvar 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 归档时间: |
|
查看次数: |
13583 次 |
最近记录: |