【问题标题】:A generic static method to create NSManagedObject创建 NSManagedObject 的通用静态方法
【发布时间】:2021-07-03 23:28:27
【问题描述】:

假设我有一个名为 Person 的 CoreData 实体:

class Person: NSManagedObject {
    // ...
}

我一直在尝试实现一个静态函数create 作为NSManagedObject 的扩展。

extension NSManagedObject {
    static func create() -> ??? {
        let object = ???
        CRUD.insertToDatabase(object) // Insert object to database
        return object
    }
}

这里我希望create() 返回一个继承NSManagedObject 的类型的实例。例如,当我从Person 调用create() 时,我希望它返回一个Person 实例。当我从Animal 类调用它时,它必须返回一个Animal 类型的实例。

let person = Person.create() // -> Returns a Person instance
let animal = Animal.create() // -> Returns an Animal instance

对于如何在父类中实现此类功能的任何帮助,我将不胜感激。

【问题讨论】:

标签: ios swift core-data


【解决方案1】:

不清楚你的 CRUD 调用应该做什么,因为当你实例化一个 NSManagedObject 子类时,它会自动插入到上下文中,但是静态方法可能看起来像这样,请注意你需要发送 NSManagedObjectContext 因为这是一个静态方法

static func create<T: NSManagedObject>(in context: NSManagedObjectContext) -> T {
    let object = T(context: context)
    CRUD.insertToDatabase(object) //what happens here? Why send object?
    return object
}

另一种方法是让 CRUD 直接执行此操作

func insertToDatabase<T: NSManagedObject>() -> T {
    let object = T(context: self.mainContext)
    //save?
    return object
}

第一个会被这样调用

let person = Person.create(in: someContext)

第二个

let person: Person = CRUD.insertToDatabase()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2011-03-29
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多