如何在swift clean架构中使用视图和数据框架

问题描述 投票:0回答:1

我正在使用 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

swift swiftui mvvm clean-architecture google-cast-sdk
1个回答
0
投票

在 SwiftUI 中,

View
结构已经是视图模型,因此它已经是 MVVM 并且已经是干净的。 SwiftUI 自动管理来自这些
View
结构轻量级描述的 UI 层(即 UIKit UIView 对象)并保持它们最新。如果您尝试在顶部编写视图模型对象的代码,您将遇到重大问题,因此最好只学习
View
结构,以及在任何
body
@State var
@Binding var 时如何调用 
let
 
变化。当您将数据传递给子项时,您还需要使用计算变量来转换数据
View

© www.soinside.com 2019 - 2024. All rights reserved.