Swift Realm (1)
App을 만들때 대부분 DB가 필요하다.
이전에는 CoreData와 SQLite를 썼지만 이제는 Realm을 쓰려고 한다.
Realm을 사용하는 이유는 몇가지가 있지만 가장 큰 것은 성능이다!!!!!
Realm과 SQLite의 벤치마크 결과는 Realm Blog에서 볼수 있다. 또한, 구글 검색으로 여러 결과들을 볼 수있다.
출처 Realm Blog : https://realm.io/kr/blog/introducing-realm-react-native/
Realm은 홈페이지에 한글로 번역이 잘되어 있다. 하지만 최신버전은 번역이 되어있지 않으니 영문으로 봐야 한다.
https://play.google.com/store/apps/details?id=com.danchoo.tagalbum&hl=ko
Cocoapods으로 설치하기
Podfile에 하기와 같이 넣어준다. 그리고 pod install or pod update실행 (음.... Cocoapods은 나중에 작성해야겠다....또륵.... )
잘되나 빌드를 해보자!!
설치가 안된다면 Cocoapods을 업데이트 진행 후 다시 해보자!
target 'projectName' do
#Realm
pod 'RealmSwift'
end
Realm 관리 객체를 만들기
1. RealmSwift를 inport를 해야한다.
- RealmSwift안에 UIKit등 기타 필요한 요소들이 import되어있다.
2. 속성표를 보고 객체를 정의한다. (홈페이지에서 복사해 왔음...)
3. 비관리 객체가 필요하면 copy함수를 작성한다.
- copy를 하게되면 비관리 객체로 복사가 된다.
관리객체 : 트랜젝션 안에서만 Write를 할 수있고, Write를 할 경우에 Realm에 반영이 된다.
비관리객체 : 일반객체와 동일하다.
https://smartstore.naver.com/happysiso
@objcMeembers
Objective-c 유형 기능을 사용하기 위해서 붙인다고 한다.
변수 앞에 @objc 이렇게 붙여도 되긴 하지만 개인적으로 모든 변수에 붙이려니 힘들어서.........
dynamic
블로그와 Developer page에 설명이 잘나와있다.
apple developer : https://developer.apple.com/swift/blog/?id=27
tstory : https://zeddios.tistory.com/296
import RealmSwift
@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"
}
}
primaryKey를 등록하기 위해서 위와같이 함수를 override해서 지정해 준다.
속성표
Type | Non-optional | Optional |
---|---|---|
Bool | dynamic var value = false |
let value = RealmOptional<Bool>() |
Int | dynamic var value = 0 |
let value = RealmOptional<Int>() |
Float | dynamic var value: Float = 0.0 |
let value = RealmOptional<Float>() |
Double | dynamic var value: Double = 0.0 |
let value = RealmOptional<Double>() |
String | dynamic var value = "" |
dynamic var value: String? = nil |
Data | dynamic var value = Data() |
dynamic var value: Data? = nil |
Date | dynamic var value = Date() |
dynamic var value: Date? = nil |
Object | n/a: must be optional | dynamic var value: Class? |
List | let value = List<Class>() |
n/a: must be non-optional |
LinkingObjects | let value = LinkingObjects(fromType: Class.self, property: "property") |
n/a: must be non-optional |
출처 : https://realm.io/kr/docs/swift/latest/
쓰기
일단 Realm에 데이터를 넣어봐야 읽을수 있으니 먼저 쓰기부터!!
func saveCompanyInfo() {
let companyInfo: CompanyInfo = CompanyInfo()
companyInfo.name = "회사"
//realm 기본 객체 얻어오기
let realm = try! Realm()
//write 트랜젝션
try! realm.write {
//객체 복사 및 업데이트
//해당 객체가 있으면 업데이트를 하고 아니면 새로 생성한다.
//companyInfo의 값이 복사되어 새로운 객체가 생성된다.
//새로 생성된 객체는 관리객체, 원본은 비관리객체로 남게된다.
let newCompanyInfo = realm.create(CompanyInfo.self, value: companyInfo, update: true)
//object add and update
//객체 add 및 업데이트
//companyInfo가 관리객체로 변경이 된다.
//add함수 이후 companyInfo를 수정하면 realm에도 반영이 된다.
realm.add(companyInfo, update: true)
}
// Realm파일이 생성되는 위치 출력
print(Realm.Configuration.defaultConfiguration.fileURL!)
}
정상적으로 객체가 삽입이 되었는지 확인하기 위해서 여러가지 방법이 있지만
AppStore에서 realm browser를 받아서 실행 시켜보면 어떻게 들어가있는지 확인 할수 있다.
읽기
단순하게 전체 데이터를 읽어보겠다. 쿼리는 다음블로그에서....
let realm = try! Realm()
print(realm.objects(CompanyInfo.self))
끝!!! 정상적으로 입력이 되었다면 잘 출력될것이다.
오늘은 여기까지........
'iOS > Swift' 카테고리의 다른 글
RxSwift (ReactiveX) (0) | 2019.04.26 |
---|---|
Swift Contacts read and write (주소록 읽기, 쓰기) (0) | 2019.01.13 |
Swift Realm (2) - 조회하기 (0) | 2019.01.06 |
Swift Xib localization (0) | 2018.11.18 |
swift Xib에 CustomView넣기 (0) | 2018.11.17 |
댓글