現在SwiftUIにて、ユーザーが文字入力できたり、入力テキストを削除できるTODOリストを作成しているのですが、UserDefaultsを組み込んだところ、foreach文で表示されるエラーで作成が行き詰まっており、ご教示いただきたいと考えております。
表示されるエラーとしては下記のものとなっており、エラー表示されているtasksやtasks.count、さらに最初の@State var tasks = Stringの箇所にも、?,!をつけて試したのですが全てエラーが出てしまいます。
Value of optional type '[Any]?' must be unwrapped to refer to member 'count' of wrapped base type '[Any]'
Chain the optional using '?' to access member 'count' only for non-'nil' base values
Force-unwrap using '!' to abort execution if the optional value contains 'nil'
要因は、全てのリストを削除した場合に、参照できるものがなくなりnilになるためこの現象になるのではないかと考えたのですが、?,!の設置はうまくいっておりません。
問題点をご指摘・ご教示いただければ大変ありがたいです。何卒よろしくお願いいたします。
<該当エラー箇所>
ForEach(0..<tasks.count, id: .self) { index in
swift
1import SwiftUI 2 3struct ContentView: View { 4 5 @State var tasks = [String]() 6 //@State var tasks = [String]() 7 @State var newtask = "" 8 var userDefaults = UserDefaults.standard 9 10 var body: some View { 11 VStack { 12 NavigationView{ 13 List{ 14 ForEach(0..<tasks.count, id: .self) { index in 15 TextField("PlainTextFieldStyle", text: self.$tasks[index] , onCommit: { 16 UserDefaults.standard.set(self.tasks, forKey: "キー") 17 }) 18 } 19 //Text(self.tasks[task])} 20 .onDelete(perform: rowRemove) 21 } 22 .navigationBarTitle("Menu") 23 let tasks = userDefaults.array(forKey: "キー") 24 25 } 26 HStack { 27 Spacer() 28 Button(action: { 29 self.tasks.append(self.newtask) 30 self.newtask = "" 31 //self.tasks = createTasks() 32 }) { 33 Image(systemName:"pencil.tip.crop.circle.badge.plus") 34 .resizable() 35 .foregroundColor(/*@START_MENU_TOKEN@*/.black/*@END_MENU_TOKEN@*/) 36 .padding(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/) 37 .scaledToFit() 38 .frame(width: 80, height: 80) 39 } 40 } 41 } 42 } 43 44 func rowRemove(offsets: IndexSet) { 45 tasks.remove(atOffsets: offsets) 46 } 47} 48 49struct ContentView_Previews: PreviewProvider { 50 static var previews: some View { 51 ContentView() 52 } 53} 54
あなたの回答
tips
プレビュー