なぜこの記事を書いたか
つい最近まで仕事でiOSアプリを開発していたんですけど、ニートになったんで暇だから以前触っていたRealmについて忘れないように
備忘録というか、運動後のストレッチ的な感覚で適当につらつら書いていきます。
ニートは好きなこと何でも出来ていいですね。
Tableの作成
RealmではTableって言わないでModelって言うんだっけか・・・?
基本的にはRealm←ここに書いてあることですが、
import RealmSwift
class HogeEntity: Object {
@objc dynamic var not_optional_bool = false // 非OptionalなBool
let optional_bool = RealmOptional<Bool>() // OptionalなBool
@objc dynamic var not_optional_int = 1 // 非OptionalなInt
let optional_int = RealmOptional<Int>() // OptionalなInt
@objc dynamic var not_optional_float: Float = 0.0 // 非Optionalなfloat
let optional_float = RealmOptional<Float>() // Optionalなfloat
@objc dynamic var not_optional_double: Double = 0.0 // 非Optionalなdouble
let optional_double = RealmOptional<Double>() // Optionalなdouble
@objc dynamic var not_optional_string = "" // 非OptionalなString
@objc dynamic var optional_string: String? = nil // OptionalなString
@objc dynamic var not_optional_data = Data() // 非OptionalなData
@objc dynamic var optional_data: Data? = nil // OptionalなData
@objc dynamic var not_optional_date = Date() // 非OptionalなDate
@objc dynamic var optional_date: Date? = nil // OptionalなDate
@objc dynamic var optional_object: TestObject? // OptionalなObject, (※)ObjectはOptionalのみ
let non_optional_list = List<Int>() // 非OptionalなList
// Primary Keyに指定する値は変数名をそのまま記述してあげる。
override static func primaryKey() -> String? {
return "not_optional_int"
}
}
// 例えば緯度経度を一纏めにして保存したいよ!って場合はObject型にして保存してあげたりとか。
class TestObject: Object {
var longitude: Float?
var latitude: Float?
}
Add
値を新しく追加したい場合
func addDayo() {
let entity = HogeEntity()
entity.not_optional_string = "新しく追加したよ"
do {
let realm = try Realm()
try realm.write {
realm.add(entity)
}
}
catch {
print(error.localizedDescription)
}
}
Delete
値を削除したい場合
func delete(entity: HogeEntity) {
do {
let realm = try Realm()
try realm.write {
realm.delete(entity)
}
}
catch {
print(error.localizedDescription)
}
}
Fetch (単体)
PrimaryKey指定で値を取得したい場合
func fetch(primaryKey: Int) -> HogeEntity? {
do {
let realm = try Realm()
return realm.object(ofType: HogeEntity.self, forPrimaryKey: primaryKey)
}
catch {
print(error.localizedDescription)
return nil
}
}
Fetch (複数)
例えば
HogeEntity#not_optional_stringにFUGAが含まれるものだけ取得したい場合
func fetch() -> [HogeEntity]? {
let predicate = NSPredicate(format: "not_optional_string contains 'FUGA'")
do {
let realm = try Realm()
return Array(realm.objects(HogeEntity.self).filter(predicate))
}
catch {
print(error.localizedDescription)
return nil
}
}
Update
値の更新を行いたい場合
func update() {
do {
let realm = try Realm()
guard let updateTarget = realm.object(ofType: HogeEntity.self, forPrimaryKey: 1) else {
return
}
try realm.write {
updateTarget.not_optional_bool = true
}
}
catch {
print(error.localizedDescription)
}
}
とりあえず
基本的に使用するのはこの程度かな?と思いますので現状ここまでにしておきます。
気が向いたら+@で追記していきます。