Objective c 如何使用swift上的realm存储对象数组?

Objective c 如何使用swift上的realm存储对象数组?,objective-c,swift,database,realm,Objective C,Swift,Database,Realm,在前面的一个问题中,我询问如何在本地数据库上存储类的实例,有人建议我使用realm作为存储方法。我已经设置了我的领域并做了研究,但是,在我的类中,我有一个对象数组,当我试图将对象数组设置为“@objc dynamic”以便将其存储到领域文件中时,它不允许这样做,抛出错误“属性不能标记为@objc,因为它的类型不能在Objective-C中表示”。我真的不明白这意味着什么,也不明白Objective-C能代表什么。” 在Realm中,您需要使用List而不是数组来创建自定义类(如Ingerdien

在前面的一个问题中,我询问如何在本地数据库上存储类的实例,有人建议我使用realm作为存储方法。我已经设置了我的领域并做了研究,但是,在我的类中,我有一个对象数组,当我试图将对象数组设置为“@objc dynamic”以便将其存储到领域文件中时,它不允许这样做,抛出错误“属性不能标记为@objc,因为它的类型不能在Objective-C中表示”。我真的不明白这意味着什么,也不明白Objective-C能代表什么。”


在Realm中,您需要使用
List
而不是数组来创建自定义类(如
IngerdientCost
)。对于
List
,您不需要使用
@objc dynamic
,而是将其声明为
let

class MealPlan: Object {
    
    let ingerdientList = List<IngerdientCost>() /// no @objc dynamic ! but you need to use let
    var k: Int = 0
    var serving : Int
    let cost = List<IngerdientCost>() /// also no @objc dynamic !
    var name : String

    ...

}
数组
的大多数属性和方法在
列表
中可用,如
.count
,您可以在其上循环(
用于ingerdientList{}
中的对象)


另一方面,没有理由在每行末尾使用

IngerdientCost
还必须符合
对象
此外,您应该使用
列表
而不是数组:
var-ingerdientList:List()
如何使IngerdientCost与对象一致?列表和数组之间有什么区别?您的领域对象缺少
self.init()
。请参阅-对象子类的自定义初始值设定项部分。此外,对于领域列表对象
@objc dynamic var ingerdientList:[IngerdientCost]=[];
。需要
让ingredientList=List()
。花几分钟时间阅读域中的列表,但在我的代码中,我使用数组属性,列表仍然有效吗?大多数像
for…in
这样的事情都有效。让我检查一下。好的,比如“.count”和数组引用,比如“array[c]“这是
列表的列表
List
Array
都符合
MutableCollection
,它允许您执行
Array[c]
,并且
List
也符合
RealmCollection
(领域的自定义类型之一),它支持
。count
我已经为上面的IngerdientCost添加了代码,我想我已经照你说的做了,但它仍然犯同样的错误。
//
//  Ingerdient cost .swift
//  IA
//
//  Created by Ian Dong on 8/25/20.
//  Copyright © 2020 Ian Dong. All rights reserved.
//

import Foundation
import RealmSwift

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


class MealPlan: Object {
    
    let ingerdientList = List<IngerdientCost>() /// no @objc dynamic ! but you need to use let
    var k: Int = 0
    var serving : Int
    let cost = List<IngerdientCost>() /// also no @objc dynamic !
    var name : String

    ...

}
class IngerdientCost: Object {
    @objc dynamic var ingerdientName: Ingerdient? /// to-one relationships must be optional → https://realm.io/docs/swift/latest/#relationships
    @objc dynamic var amount = Double(0)
}