iT邦幫忙

2

[Swift]Realm.io 如何變更資料順序(List<T>)

其實應該是要先寫如何使用Realm才對。
但我現在只是要找個地方做個紀錄。
有空有時間時再來介紹Realm.io

使用語言:swift
語言版本:3.0
資料庫封裝:Realm
資料庫:Realm > 2.4.1
使用套件:Cocoapods RealmSwift

目的:在不設置「資料順序排列欄位」的狀況下,做二筆資料的順序對調。
原因:Realm的資料排序是按照存入資料庫的時間來排序的。所以在基於這個則下來動態性質的做到排序或交換資料順序。

具體關鍵:Realm所提供的List封裝
具體做法:
首先,要做到排序,你的資料必須是父表設定的List型態。(子表owner對應父表List屬性欄位)
我目前還沒測出如果不是List欄位所設定的子表資料怎麼排序…
但可以確定的是父表子表有做List - Owner關連時,就可以進行List排序。
(事實上這本來也合理,因為你要排序的對像象應該是有關的資料而非無關的也納進來)
當然如果有誰知道非List也能做全表排序的話歡迎提供一下方法。

let realm:Realm = try! Realm()
let parentsRLM = realm.objects(RLM_Parent.self)
parentRLM = parentsRLM[0] //假設是取第一個父表,方法很多自己選
let listData:List = parentRLM.listData //假設父表的List關聯欄位叫做listData,註1

try! realm.write {
    listData.swap(index1: 0 , 1) //交換第1筆跟第2筆的資料(他的函式參數用法有點違反現行swift的規制就是了。他把第二個參數給隱式了)
}

註1:當有跟資料表做關連時,該關連欄位底下所有的資料都會變成List型態存在,而非Results的型態。
也就是說,用這種方式處理時就不需要做List轉型

其實這個東西所改變的並不是真正的資料庫順序。
他改成只是父表的list欄位所對應的子表資料的順序。

也就是說如果想對全表做排序的話也許就必須讓全表的資料都先對應到一個父資料表的欄位去才行。

不過大致上這樣應該就足夠應付很多資料排序的需求了。


尚未有邦友留言

立即登入留言