Всем привет! Я не до конца понимаю некоторые вещи, что касается инициализации, делегатов, протоколов и структур.
Я честно долго пытался самостоятельно с этим разобраться, по несколько раз пересматривал разные курсы, гуглил, писал код, перечитывал учебник, но так и не смог. Буду признателен за подробные разъяснения (потому что до этого коротких объяснений, как вы понимаете, не хватило). Я видел много примеров кода и сам могу с той или иной степенью успеха его воспроизводить, но на фундаментальном уровне у меня нет понимания, почему я это делаю.
1. Инициализация
Допустим, у нас есть следующий код:
class Car: FourWheel {
var name: String
var type: String
init(name:String, type:String) {
self.name = name
self.type = type
super.init()
changeWheel()
}
}
Я понимаю, что инициализаторы нужны для подготовки экземпляров класса, но в чем вообще смысл написания инициализатора, почему нельзя обойтись без него, почему нельзя просто задать значения для констант / переменных, указав их тип?
Что значит строчки типа self.name = name, почему нельзя обойтись без них?
Как мы определяем, когда нужно использовать класс, а когда структуру? (Да, я знаю, что структура – это value type, а класс – reference type). Но как на практике понимать, что нам подойдет лучше?
Когда при написании кода нужно использовать нижнее подчеркивание _ например, в этом коде:
struct Celsius {
var temperatureInCelsius: Double
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
init(_ celsius: Double) {
temperatureInCelsius = celsius
}
}
2. Протоколы, делегирование
Не очень понимаю, зачем они нужны. Если это шаблон для проектирования, почему этот шаблон нельзя задать через наследование? Какое практическое применение делегатов? Что значит “подписаться на делегает” и когда нам это нужно?
3. viewController
У нас есть шаблон с кодом такого вида:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Как понять, что нужно писать до viewDidLoad, что нужно писать внутри viewDidLoad, а что после него?