Swift Realm (2) - 조회하기
회사가 너무 바빴다....ㅠㅠ
Realm의 간단한 조회하는것에 대한 포스팅을 하려고 한다.
저번 포스팅때 사용했던 객체이다. (계속 사용할것 같다.)
PrimaryKey는 id라는 int형 value 를 사용한다.
https://play.google.com/store/apps/details?id=com.danchoo.tagalbum&hl=ko
@objcMembers class CompanyInfo: Object, NSCopying {
dynamic var id: Int = 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
https://smartstore.naver.com/happysiso
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 |
댓글