将领域列表 转换为数组[对象]

问题描述 投票:1回答:1

我有2个领域对象类AlertRSM和AlertRSMList包含属性

class AlertRSM : Object{
    var alertType : String?
    var alertTypeValue : String?
    var period : String?
    var colorValue : String?
    var tableName : String?
}

class AlertRSMList: Object {
    dynamic var companyAlt_Key :String?
    dynamic var dbEntryDate :String?
    var arrayOfAlertRSM = List<AlertRSM>()
}

我已经在领域数据库中有数据,并且像这样获取它

let alertRSMList = realm.objects(AlertRSMList.self)
    let selectedAlertRSMList : [AlertRSMList] = alertRSMList.filter { alertRSM in
    return alertRSM.companyAlt_Key == _companyAlt_Key
}

我正在selectedAlertRSMList中获取记录。现在,我想获取AlertRSM数组形式selectedAlertRSMList,因为我执行了以下操作

if selectedAlertRSMList.count > 0 {
    /*var alertRSM = [AlertRSM]()
    let alertList = selectedAlertList[0].arrayOfAlertRSM
    for item in alertList {
       alertRSM.append(item) 
    }
    // print(alertRSM.count) // here I am getting 9 count but all items are nil
    */
    let alertList = selectedAlertList[0].arrayOfAlertRSM
     print(alertList) // I am getting all records 
     print(alertList[0].alertType)// here I am getting nil but that is exist in alertList and also printed by print(alertList)
}

通过打印alertList

 print(alertList)

我正在获得类似记录

List<AlertRSM> <0x6000002e0500> (
[0] AlertRSM {
    alertType = Financial;
    alertTypeValue = 37.0;
    period = W;
    colorValue = 008000;
    tableName = Alert;
},
[1].....so on

但是当我尝试打印时

print(alertList[0].alertType)

我打印为零

nil

请建议我帮助将不胜感激:-)

swift3 realm
1个回答
1
投票

您需要使用dynamic关键字声明Realm模型类的所有实例属性,才能用作存储的Realm属性。这是实现Objective-C互操作性所必需的,因为Realm框架使用Obj-C运行时环境。

将所有属性都声明为dynamic之后,您的代码就可以正常工作。

class AlertRSM : Object {
    dynamic var alertType : String?
    dynamic var alertTypeValue : String?
    dynamic var period : String?
    dynamic var colorValue : String?
    dynamic var tableName : String?
}

如果您对不在Realm中保留的类的实例运行代码,则可以清楚地看到此问题。在这些代码上,您的代码可以完美运行,因为它们无法通过Obj-C运行时进行访问。只要持久化模型对象,就可以看到问题。

Realm docs:开始

领域模型属性必须具有@objc动态var属性,成为基础数据库数据的访问者。

存在三个例外:LinkingObjects,List和领域可选。这些属性不能声明为动态的,因为通用属性无法在Objective-C运行时中表示,用于动态分配动态属性。这些属性应该总是用let声明。

© www.soinside.com 2019 - 2024. All rights reserved.