Ios 使用ForEach在SwiftUI中的按钮按钮上制作独特的表单?

Ios 使用ForEach在SwiftUI中的按钮按钮上制作独特的表单?,ios,arrays,swift,foreach,swiftui,Ios,Arrays,Swift,Foreach,Swiftui,,许多人说这在最新的XCode版本中得到了修复,但它对我不起作用,我使用的是支持iOS 14.5的最新公共XCode版本。我有几个数组,每个数组都包含名称、编号和描述等信息。我希望每一个都显示为按钮,然后在点击时显示一张具有该按钮独特视图的图纸 以下是我的一个阵列的简化示例: var discussionTask = [ Task(taskname: "Pick Up Around Your City", taskdescription: "Pick

,许多人说这在最新的XCode版本中得到了修复,但它对我不起作用,我使用的是支持iOS 14.5的最新公共XCode版本。我有几个数组,每个数组都包含名称、编号和描述等信息。我希望每一个都显示为按钮,然后在点击时显示一张具有该按钮独特视图的图纸

以下是我的一个阵列的简化示例:

var discussionTask = [
        Task(taskname: "Pick Up Around Your City", taskdescription: "Pick up and recycle litter", sfsymbolname: "trash.slash.fill", tokencount: 15),
        Task(taskname: "Go Paperless", taskdescription: "When possible, opt to use a digital device over paper.", sfsymbolname: "trash.slash.fill", tokencount: 15),
        Task(taskname: "Plant a Tree", taskdescription: "Plant a tree.", sfsymbolname: "leaf.fill", tokencount: 15)
    ]
对于这个示例数组,我希望为每个
任务
创建一个按钮,因此在本例中有3个按钮。第一个按钮应显示名称“在您的城市附近提货”,并带有数字“15”。单击时,我希望它显示所有数据,包括
taskscription
sfsymbol

我当前尝试的所有操作都只显示排序数组中的第一项,但我希望它为每个按钮显示一个唯一的工作表。我将继续添加更多的内容,而不仅仅是列表中的三项。以下是我目前正在尝试的:

func DiscussionTrackViewButton(tasknumber: Int) -> some View {
        
        Button(action: {
            print(tasknumber)
            showTaskSheet = true
        }, label: {
            TrackBlockView(sfimagename: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].sfsymbolname, taskname: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].taskname, tokencount: String(discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].tokencount)) 
        })
        .sheet(isPresented: $showTaskSheet) {
            DetailedTrackView(sfsymbolname: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].sfsymbolname, taskname: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].taskname, taskdetails: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].taskdescription, tokencount: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].tokencount, trackData: $trackdata, DailyGoalProgress: $DailyGoalProgress, TabSelection: $TabSelection, SavedDailyGoal: $SavedDailyGoal, DateSinceStreak: $DateSinceStreak, DaysOfStreak: $DaysOfStreak)
        }
            
        
    }
func discussiontrackview按钮(任务编号:Int)->一些视图{
按钮(操作:{
打印(任务编号)
showTaskSheet=true
},标签:{
TrackBlockView(sfimagename:discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。sfsymbolname,taskname:discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。taskname,tokencount:String(discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。tokencount))
})
.工作表(显示:$showTaskSheet){
DetailedTrackView(sfsymbolname:discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。sfsymbolname,taskname:discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。taskname,taskdetails:discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。taskdescription,tokencount:discussionTask.sorted{$0.taskname<$1.taskname}[taskname].tokencount,trackData:$trackData,DailyGoalProgress:$DailyGoalProgress,TabSelection:$TabSelection,SavedDailyGoal:$savedDateSincStreak:$DateSincStreak,DaysOfStreak:$DaysOfStreak)
}
}
下面是我调用函数的地方:

ForEach(0..<discussionTask.count) { index in
                                    DiscussionTrackViewButton(tasknumber: index)
                                 }

ForEach(0..您可以执行以下操作:

struct DiscussionTaskView: View {
    var discussionTasks = [
        Task(taskname: "Pick Up Around Your City", taskdescription: "Pick up and recycle litter", sfsymbolname: "trash.slash.fill", tokencount: 15),
        Task(taskname: "Go Paperless", taskdescription: "When possible, opt to use a digital device over paper.", sfsymbolname: "trash.slash.fill", tokencount: 15),
        Task(taskname: "Plant a Tree", taskdescription: "Plant a tree.", sfsymbolname: "leaf.fill", tokencount: 15)
    ]
    
    @State var selectedTask: Task?
    
    var body: some View {
        VStack(spacing: 20) {
            ForEach(discussionTasks) { task in
                Button {
                    selectedTask = task
                } label: {
                    Image(systemName: task.sfsymbolname)
                }
                .sheet(item: $selectedTask) { task in
                    VStack(alignment: .center, spacing: 20) {
                        Text(task.taskname)
                            .font(.headline)
                        Text(task.taskdescription)
                        Text("\(task.tokencount)")
                        Image(systemName: task.sfsymbolname)
                    }
                }
            }
        }
    }
}
这将使用
工作表(项目:内容:)
版本的
工作表
修改器在点击相应按钮时显示每个项目

它还假设您的
任务
结构符合
可识别的
,如果它还不符合,这并不难做到