Создам тему, тк ковыряю Firestore и вопросов много, но начну по чуть-чуть.
Требуется помощь гуру.
Использую структуру для работы с данными и кастомный инициализатор, сделанный через экстеншен:
struct MainUser {
let uid: String
var email: String
var firstName: String
var secondName: String
var friends: [String]
var role: String
var dictionary: [String: Any] {
return ["uid": uid, "email": email, "firstName": firstName, "secondName": secondName, "friends": [friends], "role": role]
}
}
extension MainUser {
init?(dictionary: [String: Any]) {
guard let uid = dictionary["uid"] as? String,
let email = dictionary["email"] as? String,
let firstName = dictionary["firstName"] as? String,
let secondName = dictionary["secondName"] as? String,
let friends = dictionary["friends"] as? [String],
let role = dictionary["role"] as? String else {return nil}
self.init(uid: uid, email: email, firstName: firstName, secondName: secondName, friends: friends, role: role)
}
}
Главная проблема:
Firestore позволяет создавать значения в документах в массивах
Обратите внимание на проперти friends в структуре MainUser. Обычный массив. При инициализации используется вычислямое свойство dictionary.
Так вот, при создании документа let newUser = MainUser(uid: "", email: email, firstName: firstName, secondName: secondName, friends: [], role: "")
даже с пустым массивом, Firestore ругается следющим сообщением: “Nested arrays are not supported” - “Вложенные массивы не поддерживаются”. Но вроде же создаётся обычный массив, а не вложенный… По ощущениям ошибка в инициализаторе, но не пойму где. Нужна помощь
Вопрос 2 (неважный):
при данной структуре и экстеншене почему-то не появляется кастомный инициализатор при создании объекта структуры
прописываю вручную - всё работает. Хз где ошибка…
З.Ы при закомменчивании данного проперти (friends), всё работает нормально и создаётся запись в Firestore.
let newUser = MainUser(uid: "", email: email, firstName: firstName, secondName: secondName, /*friends: [],*/ role: "")
let ref = db.collection("users").addDocument(data: newUser.dictionary) {
Ессно закоментил везде, где надо