вот рабочий пример
struct Person {
var name: String!
}
extension Person {
init(data: Data) {
self.init(name: "")
}
}
let person = Person(name: String)
let person2 = Person(data: Data)
вот рабочий пример
struct Person {
var name: String!
}
extension Person {
init(data: Data) {
self.init(name: "")
}
}
let person = Person(name: String)
let person2 = Person(data: Data)
да, просто перенесите ваш init в extension, только там нужно вызывать self.init, в который будете передавать значения для каждого свойства.
константа это из моего примера.
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. Только он будет опциональным.
В случае со структурами это не подойдет, т.к. придется самому создавать дефолтный инициализатор.