Возможно не до конца понял
Помогите решить ошибку
struct Place {
...
}
extension Place {
init(snapshot: DataSnapshot) {
let snapshotValue = ...
self.init(
name: snapshotValue["name"] as! String,
address: ...,
...
)
}
}
что бы была возможность использовать дефолтный и кастомный конструктор.
если кастомный конструктор создать внутри структуры, то он перезапишет дефолтный и в итоге будет доступен только кастомный.
это своего рода хак. хотя в документации сами эпл так пишут.
Это я понял, как можно загуглить эти ошибки
Мне не нужно заполнять массив комментария и картинку в данный момент, но инициализатор требуется же
Все понял. Это не хак, а особенность структур. У них по умолчанию создается designated contructor
. А если напишем сразу в теле, то придется его явно прописывать. Тут получается экономия в плане кода.
Все верно. Это отличие от класса, не нужно писать дефолтный конструктор. Но придется выносить в расширение кастомный, если понадобится.
Объяснение скорее было в стиле для новичков, просто и понятно, без умных фраз ))
Спасибо большое, я решил вообще отказаться от массива комментариев, но такой вопрос возник, если я работаю с Firebase и картинки должны храниться в Storage и иметь только ссылку на путь к картинке. И в модели тогда тип картинки будет не стринг?
Это не первое отличие от класса. Я сначала подумал что тут дело в dispatch method
-ах. А для структур в теле и в расширении они одинаковые. Поэтому вопрос и возник. :)))
Как вам удобнее булет.
Либо стринг с обычным путем на картинку, который в дальгейшем преобразуете в URL.
Либо сразу можно хранить объект URL. Только он будет опциональным.
В случае со структурами это не подойдет, т.к. придется самому создавать дефолтный инициализатор.
Но там не все свойства указаны, а дефолтный требует всех свойств, которые явно не проинициализированы дефолтными значениями.