我在 swiftUI 视图中有一个绑定。类似的东西:
struct MyCoolView: View {
@ObservedObject var viewModel: ViewModel
var body: some View {
Text("Here is a cool Text!").sheet(isPresented: $viewModel.MyProperty) {
SomeModalView()}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望 isPresented 使用存储在属性中的相反布尔值。
斯威夫特不会让我做类似的事情
.sheet(isPresented: !$viewModel.MyProperty)
Run Code Online (Sandbox Code Playgroud)
(它给了我一个关于无法转换Binding <Bool>为的错误Bool)
关于如何处理这个问题的任何想法?
我不确定这是否是我们生活在这个勇敢的新 SwiftUI 世界中的反模式,但基本上我有一个 @EnvironmentObject,其中保存了一些基本的用户信息,我的视图可以调用。
我还有一个@ObservedObject,它拥有此视图所需的一些数据。
当视图出现时,我想使用@EnvironmentObject 来初始化@ObservedObject:
struct MyCoolView: View {
@EnvironmentObject userData: UserData
@ObservedObject var viewObject: ViewObject = ViewObject(id: self.userData.UID)
var body: some View {
Text("\(self.viewObject.myCoolProperty)")
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,在初始化之前,我无法在环境变量上调用 self :
“不能在属性初始值设定项中使用实例成员‘userData’;属性初始值设定项在‘self’可用之前运行。”
我可以看到一些可能的前进路线,但它们都感觉像是黑客。我应该如何处理这个问题?
我试图创建一个 Hstack'd 卡片列表,也就是说,我想创建一系列行的滚动视图。每行将包含两个并排显示的视图的 HStack,并由一些列表数据结构初始化。
struct MyHStackView: View {
var myArray = [SomeStruct(1), SomeStruct(3), SomeStruct(4), SomeStruct(5), SomeStruct(6)]
var body: some View {
ScrollView(.vertical) {
VStack {
ForEach(0..<self.myArray.count) { index in
HStack {
SubView(myArray[index])
SubView(myArray[index+1])
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是我当前的实现涉及数组的每个元素,stride新的 ForEach 中是否内置了一个函数,以便我可以索引数组上的每个其他元素以初始化行?你会如何处理这个问题?