我想在Swift中定義一個默認函數參數。默認情況下,應使用此類中的引用(功能loadMyEntities(...)
)。 Xcode(v6 Beta 4)顯示Use of unresolved Identifier 'self'
。僅使用context
而不是self.context
會導致錯誤'DB.Type' does not have a member named 'context'
。我如何處理這個問題,使用「參考後的值」作爲默認參數。Swift:類參數作爲默認函數參數
在我的具體情況下,核心數據應該在額外創建的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
}
但是這還不是相當不錯;-)
我的問題上的目標參數的用法是否迅速,但以這種方式封裝的核心數據的意見,也歡迎。
爲什麼你不使用最終版本的Xcode6而不是舊的beta4? – holex 2014-10-01 13:10:27
在開始我的新項目之前下載了最新的版本。現在試用版本6A317,同樣的行爲。 – Guardian667 2014-10-01 13:26:07