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
'Swift > 이슈 대응' 카테고리의 다른 글
[Swift] TableView 또는 CollectionView 의 didSelect 가 정상적으로 작동하지 않을 때 확인 사항 (0) | 2022.03.27 |
---|---|
[Swift] Swift UIAlertController를 외부 클릭으로 닫기 (0) | 2020.05.22 |
[Swift] iPad 멀티태스킹 대응 시 확인할 것 (4) | 2020.04.14 |