【发布时间】:2021-11-07 13:06:58
【问题描述】:
我正在按照 SOLID 原则和 MVC 架构构建一个简单的应用程序。我想在我的 NetworkClass 中解析来自服务器的图像,并在我的 ViewController 的 CollectionView 中显示它们。这是我的视图控制器:
protocol NetworkServiceProtocol {
func parseImages() -> [Image]
}
class ViewController: UIViewController {
@IBOutlet weak var imageCollection: UICollectionView!
private let networkService: NetworkServiceProtocol
convenience init(service: NetworkServiceProtocol) {
self.init()
self.networkService = service
}
override func viewDidLoad() {
super.viewDidLoad()
images = networkService!.parseImages()
}
}
这是我的 NetworkService 类(稍后我会做解析):
class NetworkService: NetworkServiceProtocol {
func parseImages() -> [Image] {
return [Image]()
}
}
问题是,当我运行此代码时,它在调用networkService! 时在viewDidLoad() 中崩溃。我看到问题在于实例化 NetworkServiceProtocol。我应该在哪里以及如何实例化它?任何帮助表示赞赏!
【问题讨论】:
-
你必须使用这个方法。由于您使用的是故事板。 stackoverflow.com/a/41926924/14733292
-
吹毛求疵:这不是 SOLID,而是一个反例;)
-
请您解释一下原因吗?
-
我还要做的是在 NetworkService 中的另一个私有函数中进行解析,而不是在 parseImages() 中。然后才将我输入的内容传递给 parseImages()。
-
我看到你定义了一个 IBOutlet。假设您正在从情节提要实例化这个 vc。在这种情况下,带有解码器的 init 被称为不是您添加的便利 init。这意味着您必须通过 segue 或在实例化后调用属性设置器以另一种方式传递网络服务。
标签: ios swift model-view-controller solid