我正在尝试在我的应用程序中推广MVVM模式,但是使用Swift和泛型却发现相当困难。例如:
我有一个位于模型层的Comic
结构体。但是我希望我的viewControllers
消耗符合ComicViewModel
协议的对象,以增加关注点分离。
我将模型结构体包装在一个名为Box
的类中,定义如下:
public class Box<T> {
public let value: T
public init(_ value: T) { self.value = value }
}
这仅用于将实际返回值包装在类似于此处解释的Result
枚举中。
然而,尽管我明确定义了,但Swift编译器似乎不喜欢从Comic
到ComicViewModel
的转换。
func sampleComics() -> Box<Comic> {...}
protocol ComicViewModel {...}
extension Comic : ComicViewModel {...}
func fetchComicsViewModel() -> Box<ComicViewModel> {
return sampleComics() //ERROR
}
完整的实验室可以在这里找到。
非常感谢您的帮助!
Box
处理那么简单,我还需要深入转换许多其他层次的内容以绕过这个编译器限制。 - Pierluigi Cifani