提问人:Tomas Gavenavičius 提问时间:10/12/2023 最后编辑:HangarRashTomas Gavenavičius 更新时间:10/13/2023 访问量:41
SwiftUI 线程 1:致命错误:索引超出范围
SwiftUI Thread 1: Fatal error: Index out of range
问:
在一个 ColorOptions 视图中,我有 7 种具有不同不透明度的颜色,并且选择器可以在另一个视图中更改 Circle() 的这些颜色,但有问题,“.fill”,因为当我尝试用与索引相同的颜色填充颜色时,当应用程序启动时出现索引超出范围的错误,另一行代码(GPT 提供)具有默认颜色, 但问题是当应用程序启动时,以相同的 colorIndex 但默认颜色启动,当需要启动相同的颜色时,哪个应用程序关闭,所以问题,如何启动与应用程序关闭时相同的填充 Circle() 颜色的应用程序?在打印语句中,当应用程序启动时,可以看到 selectedColorIndex 相同,但颜色变为“0”、“.red.opacity(0.3)”,并且行“.fill(selectedColors[selectedColorIndex])”出现错误,其中索引和 selectedC olor supose 相同。
ColorOptions 视图:
@Binding var selectedColorIndex: Int
@Binding var selectedColors: [Color]
@State private var colorOptions: [(name: String, colors: [Color])] = [
("Red", [
.red.opacity(0.1),
.red.opacity(0.3),
.red.opacity(0.2),
.red.opacity(0.1),
.red.opacity(0.3),
.red.opacity(0.1),
.red.opacity(0.3),
.red.opacity(0.1),
.red.opacity(0.1),
.red.opacity(0.3),
.red.opacity(0.1),
.red.opacity(0.2),
.red.opacity(0.1),
.red.opacity(0.2),
.red.opacity(0.3),
]),
("White", [
.white.opacity(0.1),
.white.opacity(0.3),
VStack {
Picker("Select a color", selection: $selectedColorIndex) {
ForEach(0..<colorOptions.count, id: \.self) { index in
Text(colorOptions[index].name)
.foregroundColor(index == selectedColorIndex ? .primary : .secondary)
.tag(index)
}
}
.pickerStyle(.wheel)
.onChange(of: selectedColorIndex) { newValue in
if newValue < colorOptions.count {
selectedColors = colorOptions[newValue].colors
print("Selected color index changed to: \(newValue)")
print("Number of selected color index: \(selectedColorIndex)")
userDefaultsManager.saveSelectedColorIndex(newValue)
userDefaultsManager.saveSelectedColors(selectedColors)
isSheetPresented = false
}
}
}
另一种观点:
@Binding var selectedColors: [Color]
@Binding var selectedColorIndex: Int
var body: some View {
ZStack {
ForEach(0..<15, id: \.self) { index in
Circle()
.fill(selectedColors[selectedColorIndex])
// .fill(selectedColorIndex < selectedColors.count ? selectedColors[selectedColorIndex] : .red.opacity(0.3))
.frame(width: circleSizes[index], height: circleSizes[index])
.blur(radius: 45)
.position(randomPosition(index: index))
.animation(
Animation.linear(duration: 9)
.repeatForever(autoreverses: true)
)
}
}
}
尝试使用“.fill(selectedColorIndex < selectedColors.count ?selectedColors[selectedColorIndex] : .red.opacity(0.3))“ GPT 提供了行,但这一行具有默认颜色,当打开应用程序 Circle() 时以相同的颜色开头,但在 print 语句中写入颜色索引不同,尝试不使用默认颜色,用户无需每次应用程序启动时更改。
答: 暂无答案
评论
selectedColors
selectedColorIndex