2017-02-17 6 views
2

Например, у меня есть модель class как этотКак создать экземпляр realm (с вложенными объектами) из словаря?

class User: Objects { 
    var firstName: String? 
    var lastName: String? 
    var friends: List<User>? 

}

и Dictionary как этот

{ 
    firstName : "Mohshin" 
    lastName : "Shah" 
    friends : [ 
       { 
       firstName : "Friend 1" 
       lastName : "abc" 
       }, 
       { 
       firstName : "Friend 2" 
       lastName : "def" 
       } 
       ] 
} 

Я хочу, чтобы создать объект пользователя с помощью словаря. Я пробовал метод Realm 'init(value: Any), и он создает пользователя только с плоскими значениями, но не инициирует друзей.

+0

Вы должны добавить его сами или использовать пустой массив – Tj3n

+0

Вы хотите сказать, что мне нужно сделать это вручную? –

+0

и друзья = [Пользователь]() вот так? –

ответ

7

Причина вы испытываете эти проблемы, потому, что List<User> объект должен быть инициализирован перед использованием. Realm рекомендует объявлять List и RealmOptional объектами как let и, следовательно, инициализировать их прямо внутри модели.

В дополнение к этому вам необходимо объявить другие свойства, используя атрибут dynamic var, чтобы свойства стали доступными для базовой базы данных.

Подробнее о том, что я упомянул в разделах Property Attributes и Supported Types разделов нашей документации. С учетом всего сказанного, я рекомендую вам изменить свою модель на следующее:

import RealmSwift 

class User: Object { 
    dynamic var firstName: String? 
    dynamic var lastName: String? 
    let friends = List<User>() 
} 

Я надеюсь, что это помогает, и, пожалуйста, дайте мне знать, если вам нужно больше помощи.

+0

Ты гений. Спасибо большое .. :) –

+0

ха-ха спасибо. <3 –

0

Try что-то вроде этого

func getRealm(dictionary:NSDictionary) { 
    let first = dictionary.object(forKey: "first_name") 
    let last = dictionary.object(forKey: "first_name") 
    var friends = Array<Any>() 
    for dict in dictionary.object(forKey: "friends") { 
     var user = User() 
     user.getRealm(dict) 
     friends.append(user) 
    } 
} 

Добавить метод, как это в вашей области модели класса

+0

На самом деле я создал общий протокол для сопоставления любого экземпляра. Настолько лучше, если существует общее решение. Я не хочу делать конкретные классы –

+0

Вы пробовали библиотеку Мантии? Он автоматически поместит свойства из массива словарей и вернет список. Будет полезно, если вы можете поделиться тем, что вы реализовали до сих пор, означает, что общий протокол, который вы внедрили – krishnanunni

+0

Нет. Я не использую 'Мантию'. –

Смежные вопросы