```swift
import SwiftUI
struct TextItem:Identifiable,Codable{
? ? var id = UUID().uuidString
? ? var text:String = ""
}
//終于寫出了范型潜慎,這個太好用了比默。每一種語法的出現(xiàn)都是為了解決一種問題莉掂,提供某種方便。
//使用方法 let dataSaver = DataSaver<你要保存的數(shù)據(jù)類型>()
class DataSaver<T:Codable>{
? ? func saveData(items:[T],forkey:String){
? ? ? ? let encode = JSONEncoder()
? ? ? ? do{
? ? ? ? ? ? let data = try encode.encode(items)
? ? ? ? ? ? UserDefaults.standard.set(data, forKey: forkey)
? ? ? ? }
? ? ? ? catch
? ? ? ? {
? ? ? ? ? ? print(error.localizedDescription,"保存數(shù)據(jù)失敗")
? ? ? ? }
? ? }
? ? func fetchData(forkey:String)->[T]{
? ? ? ? var results:[T] = []
? ? ? ? let decode = JSONDecoder()
? ? ? ? do{
? ? ? ? ? ? if let data = UserDefaults.standard.data(forKey: forkey){
? ? ? ? ? ? ? ? results =try decode.decode([T].self, from: data)
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? catch
? ? ? ? {
? ? ? ? }
? ? ? ? return results
? ? }
}
class ViewModel:ObservableObject{
? ? //尖括號里指定范型的具體類型
? ? let dataSaver = DataSaver<TextItem>()
? ? @Published var textEditors:[TextItem] = []{
? ? ? ? didSet{
? ? ? ? ? ? saveData()
? ? ? ? }
? ? }
? ? let textEditorsSaverKey:String = "textEditorsSaverKey"
? ? init(){
? ? ? ? fetchData()
? ? }
? ? func saveData(){
? ? ? ? dataSaver.saveData(items: textEditors, forkey: textEditorsSaverKey)
? ? }
? ? func fetchData(){
? ? ? ? self.textEditors = dataSaver.fetchData(forkey: textEditorsSaverKey)
? ? }
}
//蘋果應(yīng)用商店|搜|王勛才|有我全部作品
```