SwiftUI: Что такое «Выходящее закрытие» фиксирует изменяющийся параметр «self» и как это исправить - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь сравнить текущую дату с датами, которые я сохранил в Firebase. Я преобразовываю их из отметки времени в даты перед сравнением. И если равно, я хочу установить значение bool1 (переменная) в true, чтобы использовать его позже, чтобы установить цвет фона. При этом я получаю сообщение об ошибке:

Параметр выхода из замыкания, изменяющий себя.

То есть код:

struct RKDate1 {

    var date: Date

    let rkManager: RKManager1
    @State var bool1 = false
    var isDisabled: Bool = false
    var isToday: Bool = false
    var issafed: Bool = false
    var isSelected: Bool = false
    var isBetweenStartAndEnd: Bool = false

    init(date: Date, rkManager: RKManager1, isDisabled: Bool, isToday: Bool, isSelected: Bool, isBetweenStartAndEnd: Bool) {
        self.date = date
        self.rkManager = rkManager
        self.isDisabled = isDisabled

        self.isToday = isToday
        self.isSelected = isSelected
        self.isBetweenStartAndEnd = isBetweenStartAndEnd

        let db = Firestore.firestore()

        db.collection("Termin").order(by: "date").addSnapshotListener { (snap, err) in

            if err != nil{

                print((err?.localizedDescription)!)

                return
            }

            for i in snap!.documentChanges{

                let id = i.document.documentID

                let date1 = i.document.get("date") as! Timestamp

                let components = Calendar.current.dateComponents([.day,.month, .year], from: date1.dateValue())
                let components1 = Calendar.current.dateComponents([.day,.month, .year], from: date)
                let currentdate = Calendar.current.date(from: components1)
                let newdate = Calendar.current.date(from: components)

                if newdate == currentdate {
                    self.bool1 = true
                }
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Спасибо за ответ. Я ценю ваши усилия. Я пытался с мутирующим весельем c, к сожалению, это тоже не работает. Я получаю то же сообщение об ошибке. Я больше не использовал государственную собственность. Я новичок и не совсем уверен, полностью ли я понял, что мог сделать неправильно.

mutating func finddates() {


      let db = Firestore.firestore()

                            db.collection("Termin").order(by: "date").addSnapshotListener { (snap, err) in

                                if err != nil{

                                    print((err?.localizedDescription)!)

                                    return
                                }




                                for i in snap!.documentChanges{


                                  let id = i.document.documentID


                                        let date1 = i.document.get("date") as! Timestamp



                                   let components = Calendar.current.dateComponents([.day,.month, .year], from: date1.dateValue())
                                  let components1 = Calendar.current.dateComponents([.day,.month, .year], from: self.date)
                                    let currentdate = Calendar.current.date(from: components1)
                                   let newdate = Calendar.current.date(from: components)

                                    if newdate == currentdate {
                                      self.bool1 = true
                                    }



                       }

                   }

  }
0 голосов
/ 22 апреля 2020

РЕДАКТИРОВАТЬ: Похоже, что вы не можете больше изменять структуры при выходе из закрытия без удаления @ выхода из , что невозможно в вашем случае. Возможно, вы захотите изменить свою реализацию на класс.


Структуры являются неизменными. Что означает, что они не могут быть видоизменены. В вашем случае вы изменяете значение self.bool1 = true, которое меняет само значение.

~~ Лучшим способом (IMO) было бы создание mutating func для выполнения вашего вызова firebase и обновление значений внутри мутирующей функции. ~~

Кроме того, вы не должны использовать Государственные обертки в моделях. Они должны использоваться только в представлениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...