我有一个应用
- 分别提取数组的每个元素(通过索引)
- 然后将其绑定到可以利用单个元素的结构(查看和编辑)
但是每次数组减小大小时,都会导致索引超出范围错误,这不是直接由于我的代码而引起的
据我所知,这是因为:在用更改后的数组刷新循环之后,在某种程度上创建的视图还没有完全删除,仍然尝试访问超出范围的部分。但这就是我自己能想到的
这是我的示例代码:
import SwiftUI
struct test: View {
@State var TextArray = ["A","B","C"]
var body:some View {
VStack{
ForEach(TextArray.indices, id: \.self){index in
//Text View
TextView(text: self.$TextArray[index])
.padding()
}
//Array modifying button
Button(action: {
self.TextArray = ["A","B"]
}){
Text(" Shrink array ")
.padding()
}
}
}
}
struct TextView:View {
@Binding var text:String
var body:some View {
Text(text)
}
}
#if DEBUG
struct test_Previews: PreviewProvider {
static var previews: some View {
test()
}
}
#endif
有没有更好的方法可以满足上述两个要求而又不引起此问题,或者有什么方法可以避免此问题?任何答复都表示赞赏。
终于了解了我遇到的那个问题的来龙去脉。
问题是建筑。它是2折:
以下代码之所以有效,是因为它循环遍历了唯一的事实来源,而没有进行复制,并且总是更新唯一的事实来源。自从您最初将其作为绑定传递以来,我什至还添加了一种方法来更改子视图中的字符串,我想您想在某个时候进行更改
import SwiftUI
class DataSource: ObservableObject {
@Published var textArray = ["A","B","C"]
}
struct Test: View {
@EnvironmentObject var data : DataSource
var body:some View {
VStack{
ForEach(self.data.textArray , id: \.self) {text in
TextView(text: self.data.textArray[self.data.textArray.firstIndex(where: {text == $0})!])
.padding()
}
//Array modifying button
Button(action: {
self.data.textArray.removeLast()
}){
Text(" Shrink array ")
.padding()
}
}
}
}
struct TextView:View {
@EnvironmentObject var data : DataSource
var text:String
var body:some View {
VStack {
Text(text)
Button(action: {
let index = self.data.textArray.firstIndex(where: {self.text == $0})!
self.data.textArray[index] = "Z"
}){
Text("Change String ")
.padding()
}
}
}
}
#if DEBUG
struct test_Previews: PreviewProvider {
static var previews: some View {
Test().environmentObject(DataSource())
}
}
#endif
问题内容: 给出以下列表 我想创建一个新列表,该列表由将当前值和下一个值相加的元素组成。它将包含 1 小于元件。 像这样: (从0 + 1、1 + 2和2 + 3) 这是我尝试过的: 问题是我不断收到此错误: 我很确定会发生这种情况,因为当我得到(3)的最后一个元素时,我无法将其添加到任何东西中,因为这样做超出了它的值(添加3之后就没有值了) )。因此,我需要告诉代码在2处停止,同时仍引用3进行计
问题内容: 我已经开始处理我的第一个Java程序,它是一个简单的计算器,但是我得到一个错误,声称我的数组超出范围。我尝试对其进行调试,以了解这样做的原因和原因,并遵循纸上的代码,两者均显示了我期望和期望的结果。因此,我看不到问题出在哪里。代码不完整。 根据调试器,此行出现错误: 这是我当前拥有的代码的主要部分: 这是我收到的错误消息: 问题答案: 当等于中的最后一个元素索引时,则将大于最后一个元素
你好,stackoverflow的好人们!我有一个奇怪的问题,我不明白。我要发布我的两个有问题的方法: 另一个: 所以,我正在根据我在网上找到的一些代码制作一个数独解算器。现在,当我试着调试程序时,我可以很好地检查一些行(并且它按照预期工作),但是一旦程序第一次在方法“resi”中调用“next”方法,它就会崩溃,出现数组索引越界异常。如果我只是尝试在不进行调试的情况下运行该程序,那么在同一方法调
我有一个基于Euler项目问题3的代码:“13195的素数因子是5、7、13和29。600851475143中最大的素数因子是什么?” 我在下面有一个我认为可行的代码,但第9行()不断返回错误:“索引器:列表索引超出范围”。当我在for循环中移动时,似乎并没有修改列表,所以我不确定出了什么问题。 有人知道我哪里错了吗? 非常感谢。
例:“at”和“tack”应该返回true,“tree”和“ere”应该返回false。 在查看注释后编辑,我的新代码现在是这样的。它总是返回false,即使带有“tree”和“tree”。
所以我创建了这个注释: 但当我运行它时,我得到了这个异常: 无法为映射设置参数:ParameterMapping{Property='name',mode=in,javatype=class java.lang.String,JDBCType=varchar,NumericScale=null,ResultMapid='null',JDBCTypeName='null',Expression='n