Пользователь по умолчанию, добавьте число, введенное каждый раз, когда пользователь отправляет кнопку - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь добавить что-либо в массив каждый раз, когда пользователь нажимает кнопку, и сохранять его как UserDefault.

Я могу сохранить свое текстовое поле как пользовательское значение по умолчанию в зависимости от того, что вводит пользователь, но у меня возникают проблемы с сохранением и добавлением его в мой массив.

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}

    }


}

Я пытаюсь увеличить мой массив каждый раз, когда кто-то отправляет текстовое поле

Ответы [ 3 ]

0 голосов
/ 16 мая 2019

Вы можете сохранить массив после добавления текста в действие кнопки

@IBAction func submit_button(_ sender: Any) {

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

И для получения значения используйте

if let nums = UserDefaults.standard.array(forKey: "nums") as? [String] {
    print(nums)
}

Или вы можете использовать свойство computed со свойствомНаблюдатель автоматически сохраняет массив в UserDefaults при добавлении нового значения.

class ViewController: UIViewController {
    var nums: [String] {
        get {
            return UserDefaults.standard.array(forKey: "arrayValue") as? [String] ?? []
        }
        set {
            UserDefaults.standard.set(newValue, forKey: "arrayValue")
        }
    }
    @IBOutlet weak var text: UITextField!
    @IBAction func submit_button(_ sender: Any) {
        nums.append(text.text!)//Array updated in UserDefaults automatically
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        print(self.nums)//Array fetched from UserDefaults
    }
}
0 голосов
/ 17 мая 2019

Я улучшил ваш код и решил вашу проблему. поэтому, пожалуйста, проверьте код ниже и поделитесь своим отзывом в комментарии.

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 ?? "")")
    }

}
0 голосов
/ 16 мая 2019

Для последнего значения

Сохранить

let str = text.text!  
UserDefaults.standard.set(str, forKey: "Submitted") 
nums.append(str)

Чтение

if let savedscore = UserDefaults.standard.string(forKey: "Submitted") {
   self.text.text =  savedscore  
}

Для массива

Сохранить

let str = text.text!  
nums.append(str) 
UserDefaults.standard.set(nums, forKey: "Submitted") 

Читать

if let arr = UserDefaults.standard.array(forKey: "Submitted") as? [String] {
   print(arr)
   // set first value or what you need
   self.text.text =  arr.first  
}
...