更新最後にUnboxの+レルムネイティブ "リスト" オブジェクト
Unbox
ライブラリの作者は私の質問に答えます。 https://github.com/JohnSundell/Unbox/issues/156
私はList
を使用して内部の他の関連オブジェクトとRealm
オブジェクトを作るためにUnbox
を使用しようとしています。サーバーからの応答JSON
はこの構造を持っています。
[
{
"name": "bla bla",
"desc": "bla bla",
"sequential": true,
"createdAt": "2017-01-23T09:58:05.095Z",
"hmImages": [
{
"urlBase": "https://blabla.com",
"fullresPath": "/blaPath/iyba783fR81L8y.jpg",
"id": "bla bla"
},
{
"urlBase": "https://blabla.com",
"fullresPath": "/blaPath/iyba783fR81L8y.jpg",
"id": "bla bla"
}
],
"tags": [],
"id": "bla bla"
},
{
"name": "bla bla",
"desc": "bla bla",
"sequential": true,
"createdAt": "2017-01-23T09:58:05.095Z",
"hmImages": [
{
"urlBase": "https://blabla.com",
"fullresPath": "/blaPath/iyba783fR81L8y.jpg",
"id": "bla bla"
}
]
"tags": [],
"id": "bla bla"
}
]
注意:ルートオブジェクトは辞書のArray
です。すべての辞書には画像辞書がArray
あります。
Realm
内のオブジェクトを保存するためのクラスでは、次のようになります。
// MARK: - Realm
final class Challenge: Object {
dynamic var id = ""
dynamic var name = ""
dynamic var desc = ""
dynamic var sequential = false
dynamic var createdAt = Date()
dynamic var btPlayground = ""
// Relations
let hmImages = List<Image>()
let tags = List<Tag>()
override static func primaryKey() -> String? {
return "id"
}
}
// MARK: - Unboxable
extension Challenge: Unboxable {
convenience init(unboxer: Unboxer) throws {
self.init()
// Date formatter
let dateFormatter = ISODateFormatter()
id = try unboxer.unbox(key: "id")
name = try unboxer.unbox(key: "name")
desc = try unboxer.unbox(key: "desc")
sequential = try unboxer.unbox(key: "sequential")
createdAt = try unboxer.unbox(key: "createdAt", formatter: dateFormatter)
btPlayground = try unboxer.unbox(key: "btPlayground")
}
}
問題がhmImages
キーパスで発生します。 Unbox
は自動的に解析できません。これを行う方法が必要です。
私はこのようなものでUnboxableByTransform
を試してみました:
extension List<T>: UnboxableByTransform {
public typealias UnboxRawValue = [[String:Any]]
public static func transform(unboxedValue: Array<[UnboxableDictionary]>) -> List<T>? {
}
}
が、うまくいきませんでした。
ありがとうございます!