Не понимаю смысла метода 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 шт):

Автор решения: NSA-bot

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

Вот например ваш измененный пример: простейшее и тоже в каком-то смысле бессмысленное в данном случае дополнение :)

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
  }
}
→ Ссылка
Автор решения: MrRadix

Основная задача инициализатора - создать экземпляр класса/структуры. Класс/структура описывает "чертеж", инициализатор создает объект. Например, вы описываете что у табуретки есть количество ножек, цвет. При созданнии объекта по этому чертежу вы указываете что у табуретки будет 4 ножки, и она будет белого цвета. В swift инициализатор для стрктуры создается автоматически, и дополнительно его писать не обязательно но не запрещено.

→ Ссылка