我正在使用 Swift 和 SwifUI 开发一个应用程序,其中仅一种风格需要 GoogleCast 框架。
想象一下我实例化 GoogleCastButton 的视图:
import SwiftUI
import GoogleCast
struct NavBarView: View {
@ObservedObject private var viewModel: NavBarViewModel
init(viewModel: NavBarViewModel) {
self.viewModel = viewModel
}
var body: some View {
HStack {
Text("Home")
//other view stuff...
if viewmodel.showCastButton {
GCKUICastButton()
}
}
}
}
使用以下方法,我必须在视图中使用条件编译(#ifflavorA)来重用视图的其余部分,这是我不想做的事情,因为应用程序可能会变得非常复杂
我需要找到一种方法,根据风格在我的组合根中注入视图界面或类似的东西,但我不确定这是否是使用 MVVM + 干净架构的正确方法,如果是的话,我不知道如何正确地做
另一方面,如果我遵循我提到的依赖注入方法,我将需要实现一个 FakeGoogleCastButton: GoogleCastButton ,它返回一个空视图,不是吗?
如果是,我还需要创建一个 FakeGoogleCastService: CastService 以在数据层中使用?
我感觉我不明白如何在这种情况下正确应用干净架构的原则。
也许有另一种类型的接口适配器适合这种情况?
我创建了一个 CastRepository 和一个 CastService 接口来在我的用例中使用 Google Cast 数据,但我不知道应该如何处理 UI
在 SwiftUI 中,
View
结构已经是视图模型,因此它已经是 MVVM 并且已经是干净的。 SwiftUI 自动管理来自这些 View
结构轻量级描述的 UI 层(即 UIKit UIView 对象)并保持它们最新。如果您尝试在顶部编写视图模型对象的代码,您将遇到重大问题,因此最好只学习 View
结构,以及在任何 body
、@State var
或 @Binding var
时如何调用
let
变化。当您将数据传递给子项时,您还需要使用计算变量来转换数据
View
。