我正在使用存储在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/

10-14 13:31