Значения списка инициализации с помощью Realm swift - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь инициализировать пару объектов, включая объекты List, но я не уверен, какова точная семантика. Можно ли даже инициализировать объекты List из объекта Realm или мне нужно добавить их каким-либо другим способом?

class ResourcesData: Object {
    @objc dynamic var resourceID = UUID().uuidString
    @objc dynamic var name = "";

    let valueSemantics = List<ValueSemantics>();

    convenience init(resourceName: String, semantics: List<ValueSemantics>) {
        self.init()
        self.name = resourceName
        self.valueSemantics = semantics
    }

    override static func primaryKey() -> String? {
        return "resourceID"
    }
}

Модель "Мой список" с инициализатором

class ValueSemantics: Object {
    @objc dynamic var name = "";
    @objc dynamic var value = 0;

    convenience init(value: Int, valueName: String) {
        self.init()
        self.name = valueName
        self.value = value
    }
}

Вот как я пытаюсь инициализировать мой объект, но он выдает следующую ошибку '<' is not a postfix unary operator

let data: [ResourcesData] = [
  ResourcesData(resourceName: "Iron ore",
                semantics: List<
                  ValueSemantics(value: 0, valueName: "None"),
                  ValueSemantics(value: 1, valueName: "Average")
                  >
  ),
  ResourcesData(resourceName: "Gold ore",
                semantics: List<
                  ValueSemantics(value: 0, valueName: "None"),
                  ValueSemantics(value: 1, valueName: "Average")
                  >
  )   
];

do {
    try realm.write {
        realm.add(data);
    }
}catch {
    print("Error starting Realm! \(error)");
}

Я также попытался инициализировать его следующим образом

ResourcesData(resourceName: "Gold ore",
                    semantics: List(
                      ValueSemantics(value: 0, valueName: "None"),
                      ValueSemantics(value: 1, valueName: "Average")
                      ))

А также

ResourcesData(resourceName: "Gold ore",
                    semantics: [
                                ValueSemantics(value: 0, valueName: "None"),
                                ValueSemantics(value: 1, valueName: "Average")])

1 Ответ

0 голосов
/ 02 ноября 2018

List имеет только пустой инициализатор, поэтому единственный способ добавить значения в List - использовать append. Вам лучше изменить инициализатор ResourcesData для принятия Array и вызвать append(contentsOf:), чтобы добавить элементы массива в список.

class ResourcesData: Object {
    @objc dynamic var resourceID = UUID().uuidString
    @objc dynamic var name = ""

    let valueSemantics = List<ValueSemantics>()

    convenience init(resourceName: String, semantics: [ValueSemantics]) {
        self.init()
        self.name = resourceName
        self.valueSemantics.append(objectsIn: semantics)
    }

    override static func primaryKey() -> String? {
        return "resourceID"
    }
}

И тогда вы можете инициализировать это так:

let data: [ResourcesData] = [
  ResourcesData(resourceName: "Iron ore",
                semantics: [ValueSemantics(value: 0, valueName: "None"),
                  ValueSemantics(value: 1, valueName: "Average")]
  ),
  ResourcesData(resourceName: "Gold ore",
                semantics: [ValueSemantics(value: 0, valueName: "None"),
                  ValueSemantics(value: 1, valueName: "Average")]
  )   
]

Не имеет отношения к вашей проблеме, но вы не должны ставить точки с запятой в конце строк в Swift, это не Objective-C.

...