Помогите правильно сделать условие новичку

swift
xcode
ios

#1

Здравствуйте, прошу о помощи! Пишу на форумах первый раз.

Пробую написать приложение вроде Todo List под iOS.

К сути: если пользователь выполнил задачу, он должен нажать на задачу в списке, и текст в ней станет зачеркнутым.

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

Код функции, зачеркивающий выполненную задачу:

func completeTodoItem (_ indexPath: IndexPath) {
   
    var todoItem = todoItems[indexPath.row]
    todoItem.markAsComplited()
    
    todoItems[indexPath.row] = todoItem
    
   if let cell = tableView.cellForRow(at: indexPath) as? ToDoTableViewCell {
    
   cell.todoLabel.attributedText = strikeThroughText(todoItem.title)  // Зачеркиваем строку
       
   }
}

#2

Наверно стоит добавить к каждой записи статус - выполнена или нет (false/true), и уже в зависимости от этого отображать внешний вид. А нажатие на ячейку будет менять этот статус на обратный.


#3

Есть такой статус, но не понимаю как поставить условие правильно. Чтобы был check и uncheck.

Если “complete” будет false то записи будут убираться:

mutating func markAsComplited() {
    
    self.completed = true
    DataManager.save(_object: self, with: itemIdentifier.uuidString)
    
}

#4

а вы можете воспользоваться наблюдателем свойств, например didSet

Создаете свою переменную:

   var completed: Bool = false

и потом добавляете didSet:

var completed: Bool = false {
     didSet {
     }
}

Внутри вы можете проверить что новое ваше значение переменной не равно старому значению

  guard completed != oldValue else { return }

Ну и соответсвенно вызвать нужную вам функцию

    var completed: Bool = false {
        didSet {
            guard completed != oldValue else { return }
            yourFunc(completed)
        }
    }

#5

Спасибо большое. Искренне вам благодарен, сегодня обязательно попробую.