首页 > 解决方案 > 如何在 xcode swift 上将对象存储在本地数据库中

问题描述

我在我的应用程序中创建了一个类我正在创建这个类的多个实例/对象,我希望能够创建这些对象并将它们存储在本地存储中,并且能够在应用程序重新启动后初始化这些对象再次。我想知道,如果无论如何我能够有效地存储这些对象,或者将值存储在对象中并能够在程序启动后再次初始化它们。

//
//  MealPlan.swift
//  IA
//
//  Created by Ian Dong on 8/25/20.
//  Copyright © 2020 Ian Dong. All rights reserved.
//

import Foundation

struct MealPlan {
    
    var ingerdientList: [IngerdientCost] = [];
    var k: Int = 0;
    var serving : Int
    var cost : [IngerdientCost] = [];
    var name : String;
    
    init ( size: Int, name: String){
        self.serving = size;
        self.name = name;
    }
    mutating func addIngerdient (newIngerdient: IngerdientCost){
        ingerdientList.insert(newIngerdient, at: k);
        k = k+1;
    }
    mutating func removeINgerdient(theIngerdient: IngerdientCost)
    {
        var c: Int = 0;
        while theIngerdient.amount != ingerdientList[c].amount && c <= k
        {
            c=c+1;
        }
        ingerdientList.remove(at: c);
        k=k-1;
    }
    mutating func getCost() -> Array<IngerdientCost>
    {
        var c: Int = 0;
        while c <= ingerdientList.count
        {
            cost[c].ingerdientName = ingerdientList[c].ingerdientName;
            cost[c].amount = ingerdientList[c].amount * Double(serving);
            c = c+1;
        }
        return cost;
    }
    mutating func setServing( serv: Int)
    {
        self.serving = serv;
    }
}

import Foundation

struct IngerdientCost{
    
    init(Name: Ingerdient, Amount: Double )
    {
        self.amount = Amount;
        self.ingerdientName = Name;
    }
    
    var ingerdientName: Ingerdient;
    var amount: Double;
    
}

//
//  Ingerident.swift
//  IA
//
//  Created by Ian Dong on 8/25/20.
//  Copyright © 2020 Ian Dong. All rights reserved.
//

import Foundation

struct Ingerdient {
    var name: String;
      var amount: Double;
    
    init (Name:String, Amount:Double)
    {
        self.name = Name;
        self.amount = Amount;
    }
   
    mutating func setname (newname :String)
    {
        self.name = newname;
    }
    
    mutating func setamount (newamount : Double)
    {
        self.amount = newamount;
    }
    
    func getName() -> String
    {
        return self.name
    }
    func getAmount() -> Double
    {
        return self.amount
    }
    
}

struct IngerdientList {
    
    var completeList: [Ingerdient] = [];
}



标签: swiftdatabasexcodestorage

解决方案


我建议使用 CoreData,但有时会有点困难。您可以尝试看看 Realm,它是 CoreData 的一种“无痛”替代品。CoreData 由 Apple 提供,因此从长远来看,它可能会更可靠。但在我看来,Realm 有一种更直观的方式来持久化数据,因为对象的组织方式。Realm 和 CoreData 都同样强大,但是我听说 Realm 在查询时比 CoreData 快。

核心数据:https ://developer.apple.com/documentation/coredata

领域:https ://realm.io/docs/swift/latest/


推荐阅读