Swift 中 JSON 的模型类和核心数据的相同类

Posted

技术标签:

【中文标题】Swift 中 JSON 的模型类和核心数据的相同类【英文标题】:Model class for JSON and same class for core data in Swift 【发布时间】:2016-06-09 07:19:54 【问题描述】:

我有带参数的类,例如Car(NSObject 的子类),我使用它就像简单模型:

class Car 
    var model: String!

    init(json: JSON)     

        // ... parse JSON ...
    

我可以:

用 init 初始化; 将 JSON 数据解析为该模型;

然后在我的 VC 中使用这个类:添加数据、删除数据等。任何我需要的。

我也想将此模型保存到核心数据,但为此我需要其他模型:

class Car: NSManagedObject 
    @NSManaged var model: String!

这个类我不能用于解析和简单初始化。

但是,我可以创建跟随初始化器:

class Car: NSManagedObject 
    @NSManaged var model: String!

    init() 
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let managedContext = appDelegate.managedObjectContext    
        let entity = NSEntityDescription.entityForName("Car", inManagedObjectContext: managedContext)

        super.init(entity: entity!, insertIntoManagedObjectContext: nil)
    

    convenience init(json: JSON) 
        self.init()

        // ... parse JSON ...
    
 

然后我会像这样使用这个类:

var car = Car()
car.model  = "Toyota"

这是正确的解决方案吗? 如何使用一种模型满足所有需求?

【问题讨论】:

这是一个解决方案,您实际上还没有解释问题/未满足的需求... 【参考方案1】:

只需使用NSManagedObject 代表汽车。在 NSManagedObject 子类中创建一个名为 populateFromJSON(json:[String:Object]) 的方法,那么您的创建只是稍微复杂一点:

let aCar = NSEntityDescription.insertNewObjectForEntityForName("Car", intoManagedObjectContext:context)
aCar.populateFromJSON(myIncomingJSON)

完成了。

顺便说一句,调用 super.init(entity: entity!, insertIntoManagedObjectContext: nil) 很糟糕,不会产生您想要的结果。

您真的不想在 NSManagedObject 子类上覆盖 init 方法。最好创建一个populate 方法并使用指定的初始化选项。

【讨论】:

以上是关于Swift 中 JSON 的模型类和核心数据的相同类的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将 JSON 字典导入核心数据

在 Swift 中创建类和结构来表示 JSON 对象

将核心数据从 Swift 迁移到 SwiftUI

Swift 中的 iOS 私有/公共数据管理和存储

Swift:在核心数据模型中搜索字符串

Swift 3 中的 JSON 图像和核心数据 [关闭]