SwiftUIで入力データを保持する構造体を作った。
struct Gym:Identifiable,Codable { var id: Int = 0 var Menu:String = "" var WeightString:String = "" var WeightInt:Int = 0 var Kaisu:Int = 0 var Setsu:Int = 0 }
この構造体を以下のようにBindingさせて使っていた。
struct InputView:View { @Binding var input:Gym var body:some View{ TextField("種目を入力してね", text: $input.Menu) }
入力データは1つだけではなく、増やしたり減らしたりしたいので、構造体Gymの配列inputsを宣言して以下のように使う。
ScrollView{ ForEach(0..<inputs.count, id: \.self){i in InputView(input: inputs[i], idx: i) } }
この状態で構造体の配列を1つ削除するとクラッシュする。(要素を追加するのはOK)
inputs.removeLast()
解決策としては、構造体ではなくObservableを継承したクラスにして、@Bindingから@Observedに変更すれば良い。
class Gym:Identifiable,Codable,ObservableObject { var id: Int = 0 var Menu:String = "" var WeightString:String = "" var WeightInt:Int = 0 var Kaisu:Int = 0 var Setsu:Int = 0 }
@ObservedObject var input:Gym
参考:
https://www.yururiwork.net/【swiftui】謎のindex-out-of-rangeクラッシュで苦戦した話/