Помогите решить ошибку


#22

Возможно не до конца понял


#23
struct Place {
    ...
}

extension Place {
    init(snapshot: DataSnapshot) {
        let snapshotValue = ...
        self.init(
            name: snapshotValue["name"] as! String,
            address: ...,
            ...
        )
    }
}

#24

Я решил проблему создав инит еще один

Но возникли другие ошибки


#25

А какой смысл в данном примере выносить конструтор в расширение?


#26

что бы была возможность использовать дефолтный и кастомный конструктор.
если кастомный конструктор создать внутри структуры, то он перезапишет дефолтный и в итоге будет доступен только кастомный.
это своего рода хак. хотя в документации сами эпл так пишут.


#27

все свойства должны быть проинициализировны!


#28

Это я понял, как можно загуглить эти ошибки


Мне не нужно заполнять массив комментария и картинку в данный момент, но инициализатор требуется же


#29

тогда задайте им дефолтное значение


#30

Все понял. Это не хак, а особенность структур. У них по умолчанию создается designated contructor. А если напишем сразу в теле, то придется его явно прописывать. Тут получается экономия в плане кода.


#31

Все верно. Это отличие от класса, не нужно писать дефолтный конструктор. Но придется выносить в расширение кастомный, если понадобится.
Объяснение скорее было в стиле для новичков, просто и понятно, без умных фраз ))


#32

Спасибо большое, я решил вообще отказаться от массива комментариев, но такой вопрос возник, если я работаю с Firebase и картинки должны храниться в Storage и иметь только ссылку на путь к картинке. И в модели тогда тип картинки будет не стринг?


#33

Это не первое отличие от класса. Я сначала подумал что тут дело в dispatch method-ах. А для структур в теле и в расширении они одинаковые. Поэтому вопрос и возник. :)))


#34

Как вам удобнее булет.
Либо стринг с обычным путем на картинку, который в дальгейшем преобразуете в URL.
Либо сразу можно хранить объект URL. Только он будет опциональным.


#35

Я и не говорил что это единственное отличие. В общем это плюс в сторону структур.


#36

Damirkaz

дополнительный инициализатор обозначается словом convenience


#37

В случае со структурами это не подойдет, т.к. придется самому создавать дефолтный инициализатор.


#38

так он же в примере и создал его вроде …


#39

Он создал кастомный с параметром snapshot
Дефолтный принимает все свойства структуры


#40

в этом сообщение есть первый инициализатор с параметрами.


#41

Но там не все свойства указаны, а дефолтный требует всех свойств, которые явно не проинициализированы дефолтными значениями.