【发布时间】:2014-10-01 13:06:37
【问题描述】:
我正在尝试在 Swift 中定义一个默认函数参数。默认情况下,应使用此类中的引用(函数loadMyEntities(...))。 Xcode (v6 Beta 4) 显示 Use of unresolved Identifier 'self'。仅使用 context 而不是 self.context 会导致错误 'DB.Type' does not have a member named 'context'。我该如何处理这个问题,使用“引用后面的值”作为默认参数。
在我的具体情况下,核心数据应该在额外创建的 NSManagedObjectContext 或默认上下文中加载实体。
class DB {
var appDelegate: AppDelegate
var context: NSManagedObjectContext
var persistenceCoordinater: NSPersistentStoreCoordinator
init() {
self.appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
self.context = appDelegate.managedObjectContext!
self.persistenceCoordinater = context.persistentStoreCoordinator
}
// !!! Here's the point where I want to use the DB objects context as default !!!
func loadMyEntities(context: NSManagedObjectContext = self.context) -> [MyEntity] {
// loading entities
}
// This function can be used
func createContext() -> NSManagedObjectContext {
var newContext = NSManagedObjectContext()
newContext.persistentStoreCoordinator = self.persistenceCoordinater
return newContext
}
}
一种解决方法是定义函数两次,一次有参数,一次没有,然后从没有给定上下文的函数中委托。
func loadMyEntities() -> [MyEntity] {
return loadMyEntities(self.context)
}
func loadMyEntities(context: NSManagedObjectContext) -> [MyEntity] {
// loading entities
}
但这不是很好;-)
我的问题是关于参数的使用,如果 swift 的话,但是以这种方式封装核心数据的 cmets 也是受欢迎的。
【问题讨论】:
-
为什么不使用Xcode6的最终版本而不是旧的beta4?
-
在开始我的新项目之前下载了最新版本。现在尝试了 6A317 版本,同样的行为。
标签: core-data swift optional-parameters class-variables