Прежде всего, пожалуйста, соблюдайте соглашение об именах, согласно которому имена структур и классов начинаются с заглавной буквы, и выгода в том, что структура Answer
и свойство answer
не могут быть ошибочными.И чтобы избежать путаницы, назовите структуру в единственном числе (в строке, где создается новый ответ, вы создаете семантически один ответ, а не один ответ ).И свойства могут быть объявлены как константы (let
).
struct Answer : Codable {
let answer : String
let number : Int
}
Ваша проблема очень ясна: если вы хотите добавить что-то в файл списка свойств, вы должны прочитать сначала из archiveURL
, добавьте элемент (ы) и запишите его обратно.
@IBAction func vcButtonPressed(_ sender: Any) {
vcLabels[index].text = vcTextField.text
let newAnswer = Answer(answer: vcLabels[index].text!, number: index)
print(archiveURL)
index += 1
if index == 4 {
index = 0
}
do {
let data = try Data(contentsOf: archiveURL)
var savedAnswers = PropertyListDecoder().decode([answers], from: data)
savedAnswers.append(newAnswer)
let encodedNotes = try PropertyListEncoder().encode(savedAnswers)
try encodedNotes?.write(to:archiveURL, options: .noFileProtection)
} catch { print(error) }
}
И не игнорируйте ошибки с try?
. Обращайтесь с ними