2016-10-16 7 views
2

を管理し、次のJSONスキームである:RealmSwift + ObjectMapperは、私がRealmSwiftに表現するために必要なもの文字列配列(タグ)

{ 
    "id": 1234, 
    "title": "some value", 
    "tags": [ "red", "blue", "green" ] 
} 

その私がつまずくよ、基本的な文字列配列。私はレルムに推測している私には、独自の表は、レルムにタグ

dynamic id: Int = 0 
dynamic title: String = "" 
let tags = List<MyTagObject>() 

づくりとして「タグ」を表現するために必要があるが、どのようにObjectMapperでそれをマッピングするために?これは私が...

func mapping(map: Map) { 
    id <- map["id"] 
    title <- map["title"] 
    tags <- map["tags"] 
} 

を得た方法遠いです...しかし、タグラインがあるため、リストの当然のコンパイルできないとレルムは、[文字列]入力を使用することはできません。

これはやや一般的な問題だと感じていますが、これに直面した誰かがコメントを投稿したり、提案した投稿を指し示したりすることを期待しています。 MyTagObjectは、次のようになります

UPDATE 1 は:

class MyTagObject: Object { 
    dynamic var name: String = "" 
} 

UPDATE 2 私は、レルムのオブジェクトを扱うが、配列が要素ではなく、単純な文字列を指名したと仮定し、この記事を見つけました。それは動作します https://gist.github.com/Jerrot/fe233a94c5427a4ec29b

+0

「MyTagObject」クラスはどのように見えますか? – ozgur

+0

クラスozgur – darren

+0

で質問を更新しました。何が問題なのか分かりません。タグは 'MyTagbject'のリストなので、これはうまくいくはずです... –

答えて

1

のタグ配列はキーで辞書オブジェクトが含まれる場合:「名前」

{ 
    "id": 1234, 
    "title": "some value", 
    "tags": [ ["name" : "red"], ... ] 
} 

あなたはJSONオブジェクトを変更できない場合は、私は、プログラムレルムにJSONをマッピングすることをお勧めいたします。

for tagName in tags { 
    let tagObject = MyTagObject() 
    tagObject.name = tagName 
    myObject.tags.append(tagObject) 
} 
+0

まったく!フォーマットは変更できないので、どのようにコード化すればいいですか?そこに例がありますか? – darren

+0

'タグのタグ名{ let tagObject = MyTagObject() tagObject。(タグオブジェクト) myObject.tags.append(タグオブジェクト) } ' – Omartio

+0

私はそれがマッピング関数の中にあると仮定しますが、forループの例では" tags "をどのように取得しますか? – darren

3

まず第一に、我々は我々のモデルはObjectMappableの両方を拡張することを前提とすべきです。

String)型のプリミティブを格納するラッパーモデルを作成してみましょう:

class StringObject: Object { 
    dynamic var value = "" 
} 

をその後、我々は(ラッパーではない)ルートモデルのための対応するプロパティとマッピングルールを説明します。

var tags = List<StringObject>() 

var parsedTags: [String] { 
    var result = [String]() 
    for tag in tags { 
     result.append(tag.value) 
    } 
    return result 
} 

override static func ignoredProperties() -> [String] { 
    return ["parsedTags"] 
} 

func mapping(map: Map) { 
    if let unwrappedTags = map.JSON["tags"] as? [String] { 
     for tag in unwrappedTags { 
      let tagObject = StringObject() 
      tagObject.value = tag 
      tags.append(tagObject) 
     } 
    } 
} 

レルムのタグに関するデータを格納して取得するには、tagsプロパティが必要です。 次に、parsedTagsプロパティを使用すると、通常の配列形式でのタグの抽出が簡単になります。 ignoredProperties定義を使用すると、Realmでいくつかの失敗を避けることができます(もちろん、Realm以外のデータ型をRealmに格納することはできません)。 最後に、mapping関数のタグを手動で解析して、そのタグをレルムに格納します。

関連する問題