93160


## 実現したいこと

UserDefaultsを用いてタスクアプリを開発しています。  
TableViewの内容を全て削除する「全削除」機能を実装したく、guardで配列が格納されている変数の`saveList`を空にしたいのですが、書き方がわかりません。

どなたかご教授いただきたいです。

[code]

    import UIKit
    
    class HistoryViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
        
        
        @IBOutlet weak var historyTableView: UITableView!
        
        var saveArray :[String] = []
        var textFieldValue :String = ""
        
        override func viewDidLoad() {
            super.viewDidLoad()
            title = "履歴"
        }
        
    　　　　　　　　//ここから
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            guard let saveList = UserDefaults.standard.array(forKey: "history") as? [String] else {
                print("値がありません")
                return
            }
    
            if saveArray == [] {
                print(saveList) 
    //            saveList = [] //空の配列を入れてみようとしましたがダメでした
            }
            
            saveArray = saveList.reversed()
    
            self.historyTableView.reloadData()
            
        }
        
        @IBAction func deleteButton(_ sender: Any) {
    
            UserDefaults.standard.removeObject(forKey: "history")
            saveArray.removeAll()//saveArrayの内容を消してみましたが、saveListに格納されているタスクが表示されてしまいます
            historyTableView.reloadData()
        }
        
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            //        print(self.memoryArrayReversed.count)
    //        print(saveArray.count)
            return saveArray.count
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            let cell = historyTableView.dequeueReusableCell(withIdentifier: "Cell")!
            cell.textLabel?.text = saveArray[indexPath.item]
    //        cell.textLabel?.numberOfLines=0
            return cell
        }
        
        // セルの削除機能
        func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
            if editingStyle == UITableViewCell.EditingStyle.delete {
                print(saveArray)
                saveArray.remove(at: indexPath.row)
                historyTableView.deleteRows(at: [indexPath as IndexPath], with: UITableView.RowAnimation.automatic)
                // 追加：削除した内容を保存
                UserDefaults.standard.set(saveArray, forKey: "history")
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2023-01-03T00:23:53.613
93157
2023-01-03T03:28:58.973
2023-01-03T01:06:43.023
55638
55638
question
swift
guardの配列の値を空にしたい


guardから8行ぐらい消して、以下を追加でうまく動作すると思います。  
※外出先なので、試せてはいません

[code]

    self.saveArray = UserDefaults.standard.stringArray(forKey: "history") ?? []
    
[/code]

@coconaさんのコードでエラーが出るのはsaveListがletで定義されているため、変更(空にする)することが出来ないためです。


CC BY-SA 4.0
2023-01-03T03:28:58.973
93160
2023-01-03T03:28:58.973
40856
93157
answer