我正在使用存储在RealmDB中的LocalSubject.swift类。
class LocalSubject: Object{
@objc dynamic var subjectName: String?
private var modules: [Module] = [Module]()
@objc dynamic var moduleArrayJSON: String? = nil
public func addModule(module: Module){
modules.append(module)
}
public func setModules(modules: [Module]){
self.modules = modules
print("LocalSubject.swift > setModules() > " + String(describing: modules.count) + " > " + String(describing: self.modules.count))
}
public func getModules()-> [Module]{
print("LocalSubject.swift > getModules() > " + String(describing: modules.count) + " > " + String(describing: self.modules.count))
return modules.sorted(by: { $0.displayOrder! < $1.displayOrder!})
}
}
我通过将“模块”数组转换为json&back将类存储在DB中。
在下面的函数中,使用count = 3正确计算“模块”,然后在LocalSubject的“数学”对象中进行设置。现在,当我尝试从“数学”中获取“模块”时,我总是会得到一个空数组。
public func createModuleArrayFromJSONInSubjects(){
let modules = getModuleArrayFromJSON(moduleArrayJSON: (maths?.moduleArrayJSON)!)
for module in modules{
print("-> " + module.title!)
}
maths?.setModules(modules: modules)
for module in (maths?.getModules())!{
print("---> " + module.title!)
}
}
我无法弄清楚,似乎很奇怪。
我想念什么吗?
最佳答案
Realm对象不支持数组类型,而是应使用Realm类型List
来维护对其他Realm对象的引用。如果Module
不是Realm对象子类,则不能存储对其的引用。看到这里:https://realm.io/docs/swift/latest/#models
因此,有两种选择:
将modules
属性更改为List
并在Realm中也维护Module
对象,或者
如果要存储JSON,是否需要存储modules
属性?您可以继续仅存储JSON字符串,并使modules
成为计算属性(为此需要getter
,并且可以选择是否创建setter
)。
您必须根据用例选择前进的方向。
关于ios - 在Swift 4中设置和获取数组时发生奇怪的事情,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55030063/