質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%

Q&A

0回答

954閲覧

SwiftUIで作成したTODOリストのUserDefaults保存に関するエラーについて

naki888

総合スコア12

0グッド

0クリップ

投稿2020/10/16 07:32

編集2020/10/21 09:07

現在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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問