Realm 基于属性值检索单个领域对象

Realm 基于属性值检索单个领域对象,realm,swift3,Realm,Swift3,如何在使用领域检索数据时返回具有值的类? 我正在尝试使用此代码,但不允许使用swift 3: static func getInfoById(id: String) -> DataInfo { let scope = DataInfo () let realm = try! Realm() scope = realm.objects(DataInfo.self).filter("IdInfo == %@", id) return scope } 您的代码r

如何在使用领域检索数据时返回具有值的类? 我正在尝试使用此代码,但不允许使用swift 3:

static func getInfoById(id: String) -> DataInfo {
    let scope = DataInfo ()
    let realm = try! Realm()
    scope = realm.objects(DataInfo.self).filter("IdInfo == %@", id)
    return scope
}

您的代码
realm.objects(DataInfo.self).filter(“IdInfo==%@”,id)
返回一个
结果
(数据信息的过滤集合),因此您并不是真正返回
数据信息
对象。您可以先调用
scope.first
从结果中获取一个
DataInfo

static func getInfoById(id: String) -> DataInfo {
    let realm = try! Realm()
    let scope = realm.objects(DataInfo.self).filter("IdInfo == %@", id)
    return scope.first!
}
尽管如此,我不建议强制展开,因为找不到任何项目,强制展开nil值会导致崩溃。因此,您可以返回一个
DataInfo?

static func getInfoById(id: String) -> DataInfo? {
    let realm = try! Realm()
    let scope = realm.objects(DataInfo.self).filter("IdInfo == %@", id)
    return scope.first
}
static func getInfoById(id: String) -> DataInfo? {
    let realm = try! Realm()
    return realm.object(ofType: DataInfo.self, forPrimaryKey: id)
}
或者,如果您在领域对象子类中明确声明
IdInfo
是您的主键,则可以使用
Realm.Object(ofType:DataInfo.type,forPrimaryKey:id)

static func getInfoById(id: String) -> DataInfo? {
    let realm = try! Realm()
    let scope = realm.objects(DataInfo.self).filter("IdInfo == %@", id)
    return scope.first
}
static func getInfoById(id: String) -> DataInfo? {
    let realm = try! Realm()
    return realm.object(ofType: DataInfo.self, forPrimaryKey: id)
}

最后一段代码显示无法转换结果类型“对象”?“对于预期类型的DataInfo,我可以使用为!要分析的数据信息?我的错,函数的返回类型应该是可选的,即
DataInfo?
。确定,现在显示:
类型DataInfo没有成员类型
。。。我猜是
DataInfo.self
道歉,又一个打字错误
DataInfo.type
应该是
DataInfo.self
。编辑了答案。