swiftuiでリストを作成しており、入力した文言を編集可能にし、都度保存するようなアプリを作成しています。
swiftuiでの保存はuserDefaultsを使用するとのことだったので、TextFieldでのコード実行後に、userDefaultsを組み込んだのですがエラーが出てしまいます。
エラーはNavigationviewの箇所とリストのForEach内部となっています。
Type 'Void' cannot conform to 'View'; only struct/enum/class types can conform to protocols
Value of optional type '[Any]?' must be unwrapped to refer to member 'count' of wrapped base type '[Any]'
どの部分が間違っているのかわからず困っています。ご指導いただければ幸いです。
swift
1import SwiftUI 2 3struct ContentView: View { 4 5 @State var tasks = ["リスト1", "リスト2", "リスト3", "リスト4", "リスト5"] 6 //@State var tasks = [String]() 7 @State var newtask = "" 8 var userDefaults = UserDefaults.standard 9 10 11 var body: some View { 12 VStack { 13 NavigationView{ 14 List{ 15 ForEach(0..<tasks.count, id: .self) { index in 16 TextField("PlainTextFieldStyle", text: $tasks[index])} 17 //Text(self.tasks[task])} 18 .onDelete(perform: rowRemove) 19 } 20 .navigationBarTitle("Menu") 21 let tasks = userDefaults.array(forKey: "キー") 22 userDefaults.set(tasks, forKey: "キー") 23 } 24 HStack { 25 Spacer() 26 Button(action: { 27 self.tasks.append(self.newtask) 28 self.newtask = "" 29 //self.tasks = createTasks() 30 }) { 31 Image(systemName:"pencil.tip.crop.circle.badge.plus") 32 .resizable() 33 .foregroundColor(/*@START_MENU_TOKEN@*/.black/*@END_MENU_TOKEN@*/) 34 .padding(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/) 35 .scaledToFit() 36 .frame(width: 80, height: 80) 37 } 38 } 39 } 40 } 41 42 func rowRemove(offsets: IndexSet) { 43 tasks.remove(atOffsets: offsets) 44 } 45} 46 47struct ContentView_Previews: PreviewProvider { 48 static var previews: some View { 49 ContentView() 50 } 51}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/16 05:15
2020/10/16 06:05 編集
2020/10/16 07:01