小编Sto*_*oic的帖子

何时使用 @State 与 @Published

我觉得这是一个已经在某个地方被问过的问题,但我找不到太多相关内容。

当使用变量来更新 UI 时,我们何时/为什么要@State在视图中使用而不是使用@Published在 ViewModel 中使用?

这是我试图掌握 MVVM 架构的背景。我总体上理解这种差异,只是当涉及到两者都可以轻松以相同方式完成的事情时。

下面,我有 2 个示例执行相同的操作,但其中一个使用ViewModel,而@State另一个则使用@PublishedViewModel。一种方法是否比另一种更好(用于更新 UI 目的?)

@State例子:

struct MyView: View {
    @State var backgroundIsRed = false

    var body: some View {
        ZStack {
            if backgroundIsRed {
                Color.red
            } else {
                Color.green
            }
        }
        .onTapGesture { backgroundIsRed.toggle() }

    }
}
Run Code Online (Sandbox Code Playgroud)

@Published例子:

class ViewModel: ObservableObject {
    @Published var backgroundIsRed = false
}

struct MyView: View {

    @StateObject var viewModel = ViewModel()

    var body: some …
Run Code Online (Sandbox Code Playgroud)

mvvm swift swiftui

8
推荐指数
1
解决办法
5782
查看次数

如何在 SwiftUI 中设置覆盖层的不透明度

我正在尝试在 SwiftUI 中设置覆盖层的不透明度。但是,我只是想更改叠加层的不透明度,并希望保持正在叠加的符号的不透明度。但是,当我应用 .opacity() 修饰符时,它会更改整个视图(图像和叠加层)的不透明度

                Image(systemName: "magnifyingglass")
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(width: 20, height: 20)
                    .padding(10)
                    .overlay(Color.gray)
                    .opacity(0.1)
                    .clipShape(Circle())
Run Code Online (Sandbox Code Playgroud)

这段代码产生这个视图

如您所见,整个视图几乎不可见,我试图仅使搜索图标周围的灰色圆圈不透明,并保持搜索图标本身的不透明度。

xcode overlay swift swiftui

5
推荐指数
1
解决办法
9328
查看次数

如何在结构中省略参数名称

Swift 初学者在这里...在实例化期间将值传递到结构体实例时,有没有办法省略参数名称?我在 Swift 文档中找不到任何内容。

struct Dog {
    var _ name: String
}

var buddy = Dog("Buddy")
Run Code Online (Sandbox Code Playgroud)

显然这是行不通的。在函数中,您可以在参数名称之前使用下划线以在调用期间省略它,这对于结构是否可以以某种方式实现?

parameters struct swift

3
推荐指数
1
解决办法
943
查看次数

标签 统计

swift ×3

swiftui ×2

mvvm ×1

overlay ×1

parameters ×1

struct ×1

xcode ×1