【SwiftUI】ListViewとUserDefault

ListViewに表示した文字列を追加したり、削除するタイミングでUDを使って端末内に保存するアプリを作ってみた。

アプリ実行画面
import SwiftUI

let aKey = "arraykey"

struct LogView: View {
    @State var array:[String] = []
    var body: some View {
        VStack{
            if(!array.isEmpty){
                List {
                    ForEach(array, id: \.self) { i in
                        Text(i)
                    }.onDelete(perform: delete)
                }
            }else{
                Text("データはありません。")
            }
            Button {
                array.append("some data")
                UserDefaults.standard.set(array, forKey: aKey)
            } label: {
                Text("追加する")
            }
        }.onAppear{
            if let tmp:[String] = UserDefaults.standard.array(forKey: aKey) as? [String]{
                array = tmp
            }else{
                print("no key")
            }
        }
    }
    
    func delete(at offsets: IndexSet) {
            array.remove(atOffsets: offsets)
            UserDefaults.standard.set(array, forKey: aKey)
       }
}

struct LogView_Previews: PreviewProvider {
    static var previews: some View {
        LogView()
    }
}

onAppearで端末に保存したデータを読み込んでいる。

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog