从swift 3中的字符串中实现Realm对象

时间:2017-04-10 15:55:23

标签: ios json swift swift3 realm

我想知道是否可以基于字符串实例化领域对象,该字符串是领域对象的类名,但在提供之前不知道该字符串是什么。

例如:

for(_, object) in json["AllObjects"]{
    let objectType = self.getRealmObjectBasedOnString(type: className, params: object.stringValue)
    self.objectList.append(objectType)
}

这里我通过一个json,我想从数组中的每个json对象创建一个realm对象。问题是这个方法将被调用几次,每次唯一会改变的是className变量。因此,我希望将此逻辑仅保留在一个方法中,而不是创建具有相同逻辑的多个方法,或者如果确定要创建的领域对象,则使用巨大而复杂的方法。

这是getRealmObjectBasedOnString

func getRealmObjectBasedOnString(type: String, params: String) -> Object{
    switch type {
    case "classA":
        return ClassA(JSONString: params)!
    case "classB":
        return ClassB(JSONString: params)!
    default:
        return DefaultClass(JSONString: params)!
    }
}

有人可以解释为什么这不起作用以及是否有可能实现我想要的目标?

1 个答案:

答案 0 :(得分:0)

您可以使用NSClassFromString从字符串中获取Realm对象类型,但请记住,Swift使用模块进行nemespacing,因此您需要在课前添加应用程序的模块名称名。

guard let objectType = NSClassFromString("YourAppModuleName.\(json["className")") else {
    // handle unexpected class here
}

let objectList = realm.objects(objectType)