Я пытаюсь создать некоторый общий код на основе:
protocol ViewModelsCreator {
associatedtype T: EditItemViewModelType
func editItemViewModel<T>() -> T
}
class PlacesListViewModel: ViewModelsCreator {
typealias T = EditPlaceViewModel
func editItemViewModel<T>() -> T {
return EditPlaceViewModel()
}
}
class EditPlaceViewModel: EditItemViewModelType {}
protocol EditItemViewModelType {}
На игровой площадке отображается ошибка:
не может преобразовать возвращаемое выражение типа 'EditPlaceViewModel' в тип возвращаемого значения 'T'
и предложите использовать
return EditPlaceViewModel() as! T
Есть ли какое-либо решение, позволяющее избежать этого (как! T) принудительного развертывания кода?Я думаю, что компилятор должен выяснить, что EditPlaceViewModel является EditItemViewModelType и должен удовлетворять этому универсальному.