我有一个概述数据的结构,然后是一个具有结构数组的类。
struct Example: Codable, Identifiable {
var id: UUID
var title: String
var description: String?
var tags: [String]
}
class Examples: ObservableObject {
@Published var examples = [Example]()
}
Run Code Online (Sandbox Code Playgroud)
然后,我有一个用按钮显示数据的 ForEach:
ForEach(examples.examples) { example in
VStack {
Button("Complete") {
example.completed = true
}
Text(example.title)
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行时,它给出错误“无法分配给属性:‘example’是‘let’常量。” 我尝试使用 @Binding var(来自这篇文章)将示例传递到一个单独的视图中,并使用索引修改数据(来自这篇文章),但是两者都给我一个错误,指出 Xcode 无法生成诊断报告并提交反馈。我怎样才能修改数据?
抱歉,如果这是一个不好的问题,我对 SwiftUI 还很陌生
在我的 App 结构中,我有一个小函数来检查用户之前是否打开过该应用程序。如果没有,它会显示一个包含几个问题的入职视图。现在,我只有一个 .onAppear 附加到 Onboarding 和 ContentView 来运行该函数,但是当您启动应用程序时,Onboarding 视图会快速闪烁一秒钟。如何在启动期间运行该功能,以便 Onboarding 视图不会闪烁一秒钟?
这是我的应用程序结构:
import SwiftUI
@main
struct TestApp: App {
@State private var hasOnboarded = false
var body: some Scene {
WindowGroup {
if hasOnboarded {
ContentView(hasOnboarded: $hasOnboarded)
.onAppear(perform: checkOnboarding)
} else {
Onboarding(hasOnboarded: $hasOnboarded)
.onAppear(perform: checkOnboarding)
}
}
}
func checkOnboarding() {
let defaults = UserDefaults.standard
let onboarded = defaults.bool(forKey: "hasOnboarded")
hasOnboarded = onboarded
}
}
Run Code Online (Sandbox Code Playgroud)