Не понимаю смысла метода init в структуре или классе swift
struct Book {
var title: String
}
var book = Book(title: "Doom")
print(book.title) // печатает Doom
struct Book {
var title: String
init (title: String) {
self.title = title
}
}
var book = Book(title: "Doom")
print(book.title) // печатает Doom
И на фига здесь нужен init?
Ответы (2 шт):
Конкретно здесь наверно и не нужен, но, например, можно делать для одной структуры или класса разные инициализаторы, которые могут принимать разные типы данных, из которых инициализатор каким-то образом извлекает то, что ему нужно. То есть вы можете туда передать, например, другую структуру из которой извлекутся нужные для работы данные. И самое главное, эта логика будет скрыта.
Вот например ваш измененный пример: простейшее и тоже в каком-то смысле бессмысленное в данном случае дополнение :)
import Foundation
struct Book {
var title: String
init (title: String) {
self.title = title
}
init (number: Int) {
self.title = "Number of book: " + String(number)
}
}
var book = Book(title: "Doom")
print(book.title)
book = Book(number: 777)
print(book.title)
Естественно количество переменных в инициализаторе может меняться, как и их тип. Это одно из объяснений необходимости инициализаторов. Может еще напишут про другие.
В случае с Классом - инициализатор требуется, если не были установлены значения свойств по умолчанию.
class SomeClass {
var value: Int
}
Здесь компилятор скажет вам что класс SomeClass не имеет инициализатора и не знает какое значение установить свойству value. Поэтому необходимо либо указать значение по умолчанию, либо установить значение свойству в инициализаторе
class SomeClass {
var value: Int
init(_ value: Int) {
self.value = value
}
}
Основная задача инициализатора - создать экземпляр класса/структуры. Класс/структура описывает "чертеж", инициализатор создает объект. Например, вы описываете что у табуретки есть количество ножек, цвет. При созданнии объекта по этому чертежу вы указываете что у табуретки будет 4 ножки, и она будет белого цвета. В swift инициализатор для стрктуры создается автоматически, и дополнительно его писать не обязательно но не запрещено.