Search code examples
iosarraysswiftnsuserdefaults

User defaults, append the number entered each time a user submits a button


I am trying to append something to an array each time the user presses a button and save it as a UserDefault.

I can save my text field as a user default based on what the user enters, but I am having trouble getting it saved and appended to my array.

import UIKit

var nums = ["3","4","5"]

class ViewController: UIViewController {
    @IBOutlet weak var text: UITextField!

    @IBAction func submit_button(_ sender: Any) {

        UserDefaults.standard.set(text.text!, forKey: "Submitted")
        // append
        nums.append("\(String(describing: text))")
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let savedscore = UserDefaults.standard.object(forKey: "Submitted")
        if let saving = savedscore as?
            String{text.text = saving}

    }


}

I am trying to have my array grow each time someone submits in the text field


Solution

  • I have improved your code and resolved your issue. so, please go ahead and check below code and share your review in comment.

    import UIKit
    
    class ViewController: UIViewController {
    
        var nums = [String]()
    
        @IBOutlet weak var textField: UITextField!
    
        @IBAction func submit_button(_ sender: Any) {
    
            if let text = textField.text {
    
                // Append to array
                nums.append("\(text)")
    
                // Save to User Defaults
                UserDefaults.standard.set(nums, forKey: "NumberOfArray")
                UserDefaults.standard.set(textField.text, forKey: "Submitted")
    
                // Refresh User Defaults
                UserDefaults.standard.synchronize()
            }
    
            // Print Updated Data
            print("numbers: \(nums)")
            print("text: \(textField.text ?? "")")
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let savedscore = UserDefaults.standard.object(forKey: "Submitted")
    
            if let saving = savedscore as? String
            {
                textField.text = saving
            }
    
            // Update Array Based on userdefault data.
            nums = UserDefaults.standard.object(forKey: "NumberOfArray") as? [String] ?? []
    
            // Print Saved Data
            print("numbers: \(nums)")
            print("text: \(textField.text ?? "")")
        }
    
    }