Skip to content

Instantly share code, notes, and snippets.

@takashi1975
Last active December 10, 2017 23:47
Show Gist options
  • Save takashi1975/5738e49dec354232c7292f94b6ea43b9 to your computer and use it in GitHub Desktop.
Save takashi1975/5738e49dec354232c7292f94b6ea43b9 to your computer and use it in GitHub Desktop.
Swift4 Realm
//https://stackoverflow.com/questions/39579025/auto-increment-id-in-realm-swift-3-0
//プライマリキーとして次の値を取得
public static func getNextId(_ object: Object) -> Int {
//インスタンスからクラスを取得
let model = type(of: object)
//Realm
let realm = try! Realm()
//最大値を問い合わせ (nullなら1)
let value = (realm.objects(model).max(ofProperty: "id") as Int? ?? 0) + 1
return value;
}
static let schemaVersion: [UInt64] = [
0, // new
1, // edit 1 ...
2, // edit 2 ...
//...
]
public static func configuration() {
let config = Realm.Configuration(
schemaVersion: schemaVersion.last!,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < schemaVersion.last!) {
//追加・削除のみであれば、特に何もしなくていいみたい
}
})
Realm.Configuration.defaultConfiguration = config
}
//データを追加
private static func add(_ object: Object) {
//Realmを取得
let realm = try! Realm()
//書き込み(追加)
try! realm.write {
realm.add(object)
}
}
/**
* ログを期間で管理するイメージ
*/
//管理側
final class LogList: Object {
//ログ期間
@objc dynamic var start: Date = Date()
@objc dynamic var last: Date = Date()
//1対多
let logs = List<LogData>()
}
// Logデータ
final class LogData: privateRealmBaseObject {
//プライマリキー
@objc dynamic var id: Int = 0
override static func primaryKey() -> String? {
return "id"
}
//Realm: 逆参照 (どう設定したらいいかはまだ調査中...)
let list = LinkingObjects(fromType: LogList.self, property: "logs")
//ログの内容
@objc dynamic var log_date: Date = Date()
@objc dynamic var log_title: String = ""
//... etc
}
// ログを追加 (LogData 追加済み)
extension xxx {
//リストの追加
public static func add(list: LogList) {
try! let realm = Realm()
try! realm.write {
//管理テーブル
if (true) {
//ログ取得開始
list.start = new Date()
list.last = new Date()
}
//リストの追加
realm.add(object)
}
}
//ログの追加 (ログは設定済み)
public static func add(list: LogList, log: LogData) {
try! let realm = Realm()
try! realm.write {
//管理テーブル
if (true) {
//最終取得日付更新
list.last = new Date()
//項目追加
list.logs.append(object)
}
//ログの追加
realm.add(object)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment