본문 바로가기
iOS/Swift

Swift Realm (2) - 조회하기

by DnaJ 2019. 1. 6.
반응형

Swift Realm (2) - 조회하기


회사가 너무 바빴다....ㅠㅠ

Realm의 간단한 조회하는것에 대한 포스팅을 하려고 한다.



저번 포스팅때 사용했던 객체이다. (계속 사용할것 같다.)

PrimaryKey는 id라는 int형 value 를 사용한다.


@objcMembers class CompanyInfo: ObjectNSCopying {

    dynamic var idInt 0

    dynamic var name: String? = nil

    dynamic var address: String? = nil

    dynamic var tel: String? = nil

    dynamic var fax: String? = nil

    

    

    func copy(with zone: NSZone? = nil) -> Any {

        let copy = CompanyInfo()

        copy.name = self.name;

        copy.address = self.address;

        copy.tel = self.tel;

        copy.fax = self.fax;

        

        return copy

    }


    override static func primaryKey() -> String? {

        return "id"

    }

}


1. 객체 저장하기

저장을 해야 조회 테스트를 할수 있기 때문에 적어도 1개 이상의 데이터를 저장하길 바란다.

Swift4 Realm (1) 에서 객체 쓰기 및 읽기를 하고 이 포스팅을 보기를 바란다.

(Swift4 Realm (1) - https://myseong.tistory.com/4)



2. 객체 조회하기

객체 1개 조회하기

아래  함수는 id가 0인 객체를 조회하는 함수다.


func getCompanyInfo() -> CompanyInfo? {

        let realm = try! Realm()

        let result = realm.objects(CompanyInfo.self).filter("id == 0")

        

        return result.first

    }



1.  realm객체를 생성

. try! Realm() : realm객체를 생성한다. 


2. filter안에 쿼리문 넣기

. realm.objects(Class.self).filter("Query string or Query NSPredicate")

. realm.objects(Class.self) -> Class.self 에는 특정 타입을 넣어야 한다. 조회할 Object Type을 넣으면 된다. 

ex) realm.Objects(ComanyInfo.self)

. String 혹은 NSPredicate를 이용하여 쿼리문을 생성하여 filter에 넣는다.


3. 데이터 return



NSArray와 유사하게 filter를 사용하여 간단한 쿼리를 요청할 수 있다.

간단한 기본연산자를 사용해서 쿼리를 만들수 있다. 자세한 정보는 realm homepage에서 확인할 수 있다 (https://realm.io/kr/docs/swift/latest/#queries)



객제 조회후 결과 값 NSArray로 만들기


func getCompanyInfos() -> NSArray {

        let realm = try! Realm()

        let result = realm.objects(CompanyInfo.self)

        

        return NSArray(array: Array(result))

    }


객체 1개를 조회하는 것과 비슷하다

하지만 결과 값을 Array로 변경 후 NSArray에 넣는 것 뿐이다.


위의 함수는 CompanyInfo의 모든 것을 조회후 NSArray로 return하고 있다.

filter를 사용해서 쿼리를 요청 후 NSArray에 담아도 된다.


result의 객체 Type은 Results<Element> 이다.

Results<Element>는 Array로 쉽게 Convert 할수 있다.


ps. Array와 NSArray 차이

. Array : Swift의 구조체

. NSArray : NSObject를 상속받고 있는 객체


쿼리를 만드는 방식은 알아서 선택하길 바란다.

위의 경우처럼 하드코딩 하는 방식은 개인적으로 선호하진 않는다. 

스트링 형태로 쿼리를 만들면 된다.


예시 )

        let predicateQuery = NSPredicate(format: "id == %ld", id)

        let strQuery = "id == \(id)"

        let strQuery1 = String(format: "id == %ld", id)



오늘 포스팅 끝!!!

반응형

'iOS > Swift' 카테고리의 다른 글

RxSwift (ReactiveX)  (0) 2019.04.26
Swift Contacts read and write (주소록 읽기, 쓰기)  (0) 2019.01.13
Swift Realm (1)  (0) 2018.12.06
Swift Xib localization  (0) 2018.11.18
swift Xib에 CustomView넣기  (0) 2018.11.17

댓글