2016-09-28 4 views
5

Realm에서 데이터를 검색하는 동안 값이있는 클래스를 반환하는 방법은 무엇입니까? 이 코드를 사용하려고하지만, 빠른 3은 허용되지 않습니다 :속성 값을 기반으로 단일 Realm 객체 검색

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

답변

10

귀하의 코드 realm.objects(DataInfo.self).filter("IdInfo == %@", id)Results<DataInfo> (DataInfo의 필터링 모음)을 반환, 그래서 당신은 정말 DataInfo 객체를 반환하지 않는 것입니다. 결과로 DataInfo을 얻으려면 scope.first!으로 전화하십시오.

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

내가 힘 랩핑 해제가 아이템을 찾을 수 없습니다, 그리고 충돌의 전무 값의 결과를 강제 풀기 수 있기 때문에 권장하지 않습니다,하지만. 따라서 대신 DataInfo?을 반환 할 수 있습니다. 명시 적으로 IdInfo가 기본 키는 것을 당신의 영역 개체 하위 클래스에 명시된 경우

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

또는 대신 realm.object(ofType: DataInfo.type, forPrimaryKey: id)를 사용할 수 있습니다.

static func getInfoById(id: String) -> DataInfo? { 
    let realm = try! Realm() 
    return realm.object(ofType: DataInfo.self, forPrimaryKey: id) 
} 
+0

마지막 코드 쇼는 내가 구문 분석! DataInfo으로 사용할 수있는 예상 유형 DataInfo에 결과 유형 '개체? "변환 할 수 없습니다? – user1801745

+0

내 나쁜, 함수의 반환 형식은 옵션, 즉'DataInfo해야 하는가? '. – chrisamanse

+0

이제 알았습니다.'Type DataInfo에 멤버 유형이 없습니다 .' ...'DataInfo.self'라고 생각됩니다. – user1801745

관련 문제