Swift/이슈 대응

[Swift] Realm 복수 쿼리로 데이터 추출하기

언클린 2021. 12. 22. 20:22
728x90

개발하면서 Realm 하나의 객체에서 여러가지 조건으로 데이터를 추출하고자 할때

NSPredicate 를 사용하여 길게 길게 작성하면서 해보려고 했는데 너무 비효율적이고 지저분해져서

깔끔하게 할 수 있는 방법이 없나 찾아보다가 좋은 방법이 있어 글을 작성해 기록해 보기로 하였습니다.


1. NSPredicate를 배열로...

우선은 복수의 쿼리를 작성하기 위해 NSPredicate 를 배열로 선언하였습니다.

var queryArray: [NSPredicate] = []

2. 복수의 쿼리 작성

한 객체에서 여러가지 조건으로 데이터를 추출할 쿼리를 만들어 배열에 넣어줍니다

 for item in itemList {
 	 let predicate = """
     		쿼리 작성
            조건의 변경이 상황에 따라 필요하다면
            조건식을 넣어 수정
     """
 
	 // 만들어진 쿼리 배열에 넣기
     queryArray.append(NSPredicate(format: predicate))
 }

3. NSCompoundPredicate 를 사용하여 총 쿼리문 작성

이제 NSCompoundPredicate 를 사용하여 배열안의 복수의 쿼리문을 통합하여 줍니다

https://developer.apple.com/documentation/foundation/nscompoundpredicate

 

Apple Developer Documentation

 

developer.apple.com

이 때 type 으로 .or .and .not 를 설정하여 어떤식으로 합칠지 정해줍니다.

 let query = NSCompoundPredicate(type: .or, subpredicates: queryArray)

4. Realm 객체 데이터 추출

이제 만든 쿼리로 데이터를 추출합니다 완성!!!

guard let items = realm?.objects(객체.self).filter(query) else {
	return 
}

 

마무리

iOS 개발을 진행하다가 보면 Realm 을 사용하는 경우가 꽤나 있는데 NSPredicate NSCompoundPredicate 를 활용하면서 복잡한 조건문도 간편하게 작성하여 개발해 나아가면 좋을 것 같습니다!

감사합니다.


환경 

Xcode 13.1

Swift 5

 

 

 

 

728x90