2016-10-16 2 views
2

내가 RealmSwift에 표현하기 위해 필요하면 다음 JSON 방식은 관리 :RealmSwift + ObjectMapper 문자열 배열 (태그)

{ 
    "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"] 
} 

입니다 ...하지만 태그 라인 때문에 목록의 물론 컴파일하지 않고 영역은 [문자열]을 입력 할 수 없습니다.

이것은 다소 일반적인 문제인 것처럼 느껴질 수 있습니다.이 문제에 직면 한 사람이 의견을 제시하거나 의견을 게시 할 수 있기를 바랍니다. 나는 영역 객체를 다루는 것이 아니라 간단한 문자열 이상의 요소를 임명했다 배열을 가정이 게시물을 발견

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

업데이트 2 :

UPDATE 1 MyTagObject은 다음과 같습니다 . 태그 배열이 가만히 있으면 그것은 작동 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

'태그의 tagName에 대해 { let tagObject = MyTagObject() tagObject.name = tagName myObject.tags.append (tagObject) }' – 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 함수에서 태그를 수동으로 구문 분석하여 해당 태그를 영역에 저장합니다.