Swift 泛型和协议问题
Swift generics and protocols issue
我正在尝试在我的应用程序中使用 MVVM 模式,但我发现使用 Swift 和泛型很难做到。示例:
我的模型层上有一个 Comic
结构。但我希望我的 viewControllers
使用符合 ComicViewModel
协议的对象,以增加关注点分离。
我将模型结构包装在一个名为 Box
的 class 中,定义如下:
public class Box<T> {
public let value: T
public init(_ value: T) { self.value = value }
}
这仅用于将实际的 return 值包装在 Result
枚举中,就像解释的那样 here
但是,Swift 编译器似乎不喜欢从 Comic
到 ComicViewModel
的转换,即使我明确定义了
func sampleComics() -> Box<Comic> {...}
protocol ComicViewModel {...}
extension Comic : ComicViewModel {...}
func fetchComicsViewModel() -> Box<ComicViewModel> {
return sampleComics() //ERROR
}
完整的游乐场可用 here。
非常感谢您的帮助!
遗憾的是,Swift 不会执行那样的隐式转换。截至目前,您必须重新 Box()
值。
func fetchComicsViewModel() -> Box<ComicViewModel> {
return Box(sampleComics().value)
}
我正在尝试在我的应用程序中使用 MVVM 模式,但我发现使用 Swift 和泛型很难做到。示例:
我的模型层上有一个 Comic
结构。但我希望我的 viewControllers
使用符合 ComicViewModel
协议的对象,以增加关注点分离。
我将模型结构包装在一个名为 Box
的 class 中,定义如下:
public class Box<T> {
public let value: T
public init(_ value: T) { self.value = value }
}
这仅用于将实际的 return 值包装在 Result
枚举中,就像解释的那样 here
但是,Swift 编译器似乎不喜欢从 Comic
到 ComicViewModel
的转换,即使我明确定义了
func sampleComics() -> Box<Comic> {...}
protocol ComicViewModel {...}
extension Comic : ComicViewModel {...}
func fetchComicsViewModel() -> Box<ComicViewModel> {
return sampleComics() //ERROR
}
完整的游乐场可用 here。
非常感谢您的帮助!
遗憾的是,Swift 不会执行那样的隐式转换。截至目前,您必须重新 Box()
值。
func fetchComicsViewModel() -> Box<ComicViewModel> {
return Box(sampleComics().value)
}