Ale*_*nnd 0 xcode swift swiftui
我是一名设计师,我尝试学习 SwiftUI 是为了好玩,也是为了确保我更多地了解我的开发团队需要我做什么。
有一些非常简单的事情我就是做不到!
正如您从下面的这段代码中看到的,我只想在 var showHello 为 true 时显示文本,并且它工作得很好。
import SwiftUI
struct ContentView: View {
@State var showHello = true
var body: some View {
VStack {
Spacer()
Button("Show Hello", action: { showHello.toggle() })
.padding()
Spacer()
Text("This is your message:")
.padding()
if showHello == true {
Text("Hello")
} else {
Text("Hello")
.opacity(0)
}
Spacer()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我想通过使用多个视图做完全相同的事情时,它不起作用!
// Parent file
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
TopView()
BottomView()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
// Child file 1
import SwiftUI
struct TopView: View {
@State var showHello = true
var body: some View {
Button("Show Hello", action: { showHello.toggle() })
.padding()
}
}
struct TopView_Previews: PreviewProvider {
static var previews: some View {
TopView()
}
}
Run Code Online (Sandbox Code Playgroud)
// Child file 2
import SwiftUI
struct BottomView: View {
var body: some View {
Text("This is your message:")
if showHello == true {
Text("Hello")
} else {
Text("Hello")
.opacity(0)
}
}
}
struct BottomView_Previews: PreviewProvider {
static var previews: some View {
BottomView()
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我们不能共享来自不同视图的 var,因此我花了几个小时在互联网上了解有关使用 @State/@Binding 或 @EnvironmentObject 的更多信息,但所有示例都是关于从父视图向子视图共享 var视图,但不能在子视图之间进入父视图。
另外,无论我在做什么,Xcode 总是会出现错误,因为某处缺少某些东西!
我需要您的帮助,提前致谢!:P
我在互联网上花了几个小时来了解有关使用 @State/@Binding 或 @EnvironmentObject 的更多信息
所以你走在正确的道路上,因为你确实需要使用@Binding. 也许您只是对如何连接这些点有错误的想法。
基本上,您需要@State在父视图中使用属性包装器,或者ContentView由于您希望在子视图中共享相同的属性并对它的任何突变做出反应,因此您可以@Binding在子视图中使用属性包装器。
所以你会得到这样的东西:
struct ContentView: View {
@State var showHello = true
var body: some View {
VStack {
TopView(showHello: $showHello)
BottomView(showHello: showHello)
}
}
}
struct TopView: View {
@Binding var showHello: Bool
var body: some View {
Button("Show Hello", action: { showHello.toggle() })
.padding()
}
}
struct BottomView: View {
let showHello: Bool
var body: some View {
Text("This is your message:")
Text("Hello")
.opacity(showHello ? 1 : 0)
}
}
Run Code Online (Sandbox Code Playgroud)
我会推荐一些其他关于 SwiftUI 的好资源:
| 归档时间: |
|
| 查看次数: |
3674 次 |
| 最近记录: |