У меня есть протокол ItemContainer и подкласс UIViewController ItemPageController, который соответствует протоколу.
У меня также есть протокол ItemContainerControllerFactory и структура, соответствующая этому протоколу.
Проблема: я хочу создать метод, возвращающий соответствующий подтип ItemControllerControllerFactory. Однако я получаю следующую ошибку компилятора: «Невозможно преобразовать возвращаемое выражение типа ItemPageControllerFactory в возвращаемый тип T»
protocol ItemContainer {
func navigateToItem(item:Item)
}
class ItemPageController : UIViewController, ItemContainer {
func navigateToItem(item:Item) { ... }
}
protocol ItemContainerControllerFactory {
associatedtype ContainerType : UIViewController, ItemContainer
func itemContainerController() -> ContainerType
}
struct ItemPageControllerFactory: ItemContainerControllerFactory {
typealias ContainerType = ItemPageController
func itemContainerController() -> ContainerType {
return ContainerType()
}
}
//Goal: Be able to return different ItemContainerControllerFactory depending on some logic... (Currently hard coded to ItemPageControllerFactory)
func itemContainerFactory<T:ItemContainerControllerFactory>() -> T {
return ItemPageControllerFactory() //COMPILER ERROR: "Cannot convert return expression of type ItemPageControllerFactory to return type T"
}
Есть идеи, что я делаю неправильно?
return ItemPageControllerFactory()
наreturn T()
- person parveenkhtkr   schedule 27.04.2016T
. - person Hamish   schedule 27.04.2016