Закрытие SwiftUI захватывает изменяющийся параметр «я» - PullRequest
1 голос
/ 16 марта 2020

У меня есть вид, который можно открыть двумя способами. Один с предоставленными ему данными, а другой со ссылкой на документ Firestore. Я создал два конструктора, и в первом я предоставляю данные, а во втором я даю ссылку на документ. Затем я использую эту ссылку, чтобы сделать бит сетевого вызова. Я получаю сообщение об ошибке:

Escaping closure captures mutating 'self' parameter

Есть идеи, как решить эту проблему?

@State var request: RequestModel?

init(request: RequestModel) {
    self.request = request
}

init(reference: DocumentReference) {
    FirestoreService().fetchDocument(documentReference: reference) { (request: RequestModel) in
        self.request = request
    }
}

Ответы [ 2 ]

3 голосов
/ 16 марта 2020

Инициализатор объекта не может делать ничего асинхронного. Его задача - немедленно создать объект со всеми его инициализированными свойствами.

0 голосов
/ 03 мая 2020

Вероятно, это можно разделить на два разных вопроса:

1: свойства Struct нельзя изменить в замыканиях, таких как 'didSet' или 'willSet'.

2: только наблюдаемый Структура, которая была объявлена ​​с помощью @ObservedObject или @EnvironmentObject .et c, может вызывать пользовательский интерфейс для обновления при изменении свойств. Потому что такой модификатор дает свойство специальных функций getter и setter

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