Swift泛型和协议问题

时间:2015-02-26 10:52:11

标签: swift generics

我试图在我的应用程序上推送MVVM模式,但我发现使用Swift和Generics非常困难。例如:

我的模型图层上有一个Comic结构。但我希望我的viewControllers使用符合ComicViewModel协议的对象,以增加关注点的分离。

我将模型结构包装在一个名为Box的类中,其定义如下:

public class Box<T> {
    public let value: T
    public init(_ value: T) { self.value = value }
}

这仅用于将实际返回值包装在Result枚举中,如解释here

然而,即使我明确定义

,Swift编译器似乎也不喜欢从ComicComicViewModel的演员表。
func sampleComics() -> Box<Comic> {...}
protocol ComicViewModel {...}
extension Comic : ComicViewModel {...}

func fetchComicsViewModel() -> Box<ComicViewModel> {
    return sampleComics() //ERROR
}

提供完整的游乐场here

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

不幸的是,没有按斯威夫特&#39;吨执行隐式铸造这样。截至目前,您必须重新Box()该值。

func fetchComicsViewModel() -> Box<ComicViewModel> {
    return Box(sampleComics().value)
}