UsersDefaultsとはiOS や macOS アプリで ちょっとしたデータを簡単に保存できる仕組み です。
使い所
ユーザー名やメールアドレス
設定(ダークモードON/OFF、通知ON/OFFなど)
チュートリアルを見たかどうか
ちょっとしたリスト(お気に入りのIDなど)
struct ContentView: View {
@State private var userMessage: String = ""
@State private var aiReply: String = ""
@State private var items: [String] = UserDefaults.standard.stringArray(forKey: "items") ?? ["りんご", "バナナ", "みかん"]
var body: some View {
NavigationView {
VStack(spacing: 20) {
Text("AI Chat Demo")
.font(.title)
TextField("メッセージを入力", text: $userMessage)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
Button("送信") {
sendMessage()
}
.padding()
Text("AIの返答: \(aiReply)")
.padding()
Divider()
List {
ForEach(items, id:\.self) { item in
Text(item)
}
.onDelete(perform: deleteItem)
.onMove(perform: moveItem)
}
.frame(height: 200)
Button("フルーツを追加") {
addItem()
}
.padding()
Spacer()
NavigationLink(destination: ImageViewPage()) {
Text("画像ページへ移動")
.foregroundColor(.white)
.padding()
.background(Color.blue)
.cornerRadius(8)
}
NavigationLink(destination: VideoViewPage()) {
Text("動画ページへ移動")
.foregroundColor(.white)
.padding()
.background(Color.green)
.cornerRadius(8)
}
// NavigationLink(destination: CounterPage()) {
// Text("カウンターページへ")
// .foregroundColor(.white)
// .padding()
// .background(Color.green)
// .cornerRadius(8)
// }
}
.padding()
.navigationTitle("チャット")
}
}
func saveItems() {
UserDefaults.standard.set(items, forKey: "items")
}
func addItem() {
items.append("新しいフルーツ\(items.count + 1)")
saveItems()
}
func deleteItem(at offsets: IndexSet) {
items.remove(atOffsets: offsets)
saveItems()
}
func moveItem(from source: IndexSet, to destination: Int) {
items.move(fromOffsets: source, toOffset: destination)
saveItems()
}