我想知道是否可以基于字符串实例化领域对象,该字符串是领域对象的类名,但在提供之前不知道该字符串是什么。
例如:
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)!
}
}
有人可以解释为什么这不起作用以及是否有可能实现我想要的目标?
答案 0 :(得分:0)
您可以使用NSClassFromString
从字符串中获取Realm对象类型,但请记住,Swift使用模块进行nemespacing,因此您需要在课前添加应用程序的模块名称名。
guard let objectType = NSClassFromString("YourAppModuleName.\(json["className")") else {
// handle unexpected class here
}
let objectList = realm.objects(objectType)