2017-01-25 1 views
0

更新最後に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>? { 


    } 

} 

が、うまくいきませんでした。

ありがとうございます!

答えて

-1

あなたはちょうど間違った方法でそれを行います。 jsonについては、hereとお読みください。

あなた自身の方法を主張すれば。 public typealias UnboxRawValue = [[String:Any]]で使用したように、レルムがAnyタイプを受け入れないことを考慮する必要があります。レルムのタイプのみを使用できます。 Bool、Int8、Int16、Int32、Int64、Double、Float、String、NSDate、NSDataです。

関連する問題