我正在尝试在应用程序上推送MVVM模式,但是我发现使用Swift和Generics很难。例子:
Comic
我的模型层上有一个结构。但是我希望viewControllers
消耗符合对象的ComicViewModel
协议,以增加关注点的分离。
我将模型结构包装在一个名为define的类中,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()
设置价值。
func fetchComicsViewModel() -> Box<ComicViewModel> {
return Box(sampleComics().value)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句