繁体   English   中英

Swift 2.2 泛型:“无法将 ItemPageControllerFactory 类型的返回表达式转换为返回类型 T”

[英]Swift 2.2 Generics: "Cannot convert return expression of type ItemPageControllerFactory to return type T"

我有一个符合协议的“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"
}

关于我做错了什么的任何想法?

为了使用协议创建通用实例,您需要在协议中使用初始化程序

像这样:

protocol TestProtocol {
    init()
}

func create<T: TestProtocol>() -> T {
    return T()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM