我是一名 Windows C# 开发人员,刚接触 iOS/SwiftUI 开发,我想我已经陷入了困境。
我有一个带有 @Binding 变量的视图:
struct DetailView: View {
@Binding var project: Project
Run Code Online (Sandbox Code Playgroud)
该项目是一个包含任务数组的对象。我循环遍历项目的任务以显示其名称和一个开关,其状态由任务的变量 isComplete 确定。
ForEach(filteredTasks.indices, id: \.self) { idx in
HStack {
Text(filteredTasks[idx].phase)
.font(.caption)
Spacer()
Text(filteredTasks[idx].name)
Spacer()
Toggle("", isOn: self.$filteredTasks[idx].isComplete)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我花了相当长的时间才完成这段代码,我发现我必须遵循带有“索引”选项的示例才能使切换单独处理每个任务,并确保其 isComplete 值被救了。
接下来,我想根据任务变量、阶段(其值为 Planning、Construction 或 Final)过滤任务列表。因此,我创建了 4 个按钮(每个阶段一个,然后是“所有任务”以返回完整的、未过滤的列表),经过大量的试验和错误(创建不再正确绑定的过滤数组等)。等)我尝试过这个,基本上只使用原始数组。
List {
ForEach(project.tasks.filter({ $0.phase.contains(filterValue) }).indices, id: \.self) { idx in
HStack {
Text(project.tasks[idx].phase)
.font(.caption)
Spacer()
Text(project.tasks[idx].name)
Spacer()
Toggle("", isOn: self.$project.tasks[idx].isComplete)
}
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这似乎有效,因为我可以做一个测试:
func CreateTestArray() {
let testFilterArray = project.tasks.filter({ $0.phase.contains(filterValue) …Run Code Online (Sandbox Code Playgroud) 在 MacOS 12 beta 上运行 Xcode 13 beta,部署到运行 iOS 15 beta 的 iPad Pro 第四代。
在 Xcode 中,我使用增强现实应用程序创建一个应用程序,选择默认的 SwiftUI 界面、Swift 语言和 RealityKit 内容技术。
创建后,我绝对不会对代码进行任何更改,只需在我的 iPad 上运行即可。除了下面显示的其他错误/消息之外,我还收到许多弃用和类型不存在的错误/消息。
我对 Apple 开发环境有点陌生,所以也许我错过了一些非常基本的东西,但为什么我会在模板代码上收到这么多警告/错误?这是苹果测试版产品的典型情况吗?
2021-06-15 09:37:13.272034-0700 Test[47081:3536556] Metal GPU Frame Capture Enabled
2021-06-15 09:37:13.272264-0700 Test[47081:3536556] Metal API Validation Enabled
2021-06-15 09:37:15.828657-0700 Test[47081:3536556] [AssetTypes] Registering library (/System/Library/PrivateFrameworks/CoreRE.framework/default.metallib) that already exists in shader manager. Library will be overwritten.
2021-06-15 09:37:16.003778-0700 Test[47081:3536556] [Assets] Resolving material name 'engine:BuiltinRenderGraphResources/AR/suFeatheringCreateMergedOcclusionMask.rematerial' as an asset path -- this usage is deprecated; instead provide …Run Code Online (Sandbox Code Playgroud)