По сути, ваш код всегда был сомнительным, и теперь вас поймали:
protocol ViewModelBased: class {
associatedtype ViewModel
var viewModel: ViewModel { get set }
}
class MyViewController: UIViewController, ViewModelBased {
var viewModel: EntitiesViewModel!
}
В адаптере протокола MyViewController какой тип, по вашему мнению, соответствует ViewModel?Кажется, вы думаете, что это должен быть EntitiesViewModel.И компилятор позволил этому скользить, позволив неявно развернутому опциональному переносу типа заменить его на сам тип.
Но теперь не существует неявно развернутого необязательного типа;тип EntitiesViewModel!
фактически совпадает с типом EntitiesViewModel?
, необязательной оберткой EntitiesViewModel.Поэтому, если вы хотите, чтобы EntitiesViewModel был ViewModel, и если вы хотите, чтобы тип этого свойства был необязательным переносом EntitiesViewModel, протокол должен объявить тип этого свойства в качестве необязательного переноса ViewModel.