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