'self' используется до инициализации всех сохраненных свойств с ошибкой Model in View

У меня есть эта ошибка «я» используется до инициализации всех сохраненных свойств», это происходит, когда я добавляю свойство focusField: Binding<Bool>, оно выделено в коде, где возникает ошибка, имеет комментарий, я не могу понять, почему это происходит.

Это связано со следующим фрагментом кода:

struct TextInputField: View {

    final class Model: ObservableObject {
        // MARK: Properties
        @Published var text: String = ""
        var placeholder: String = ""
        var currentValue: String = ""
        var cancellables: Set<AnyCancellable> = Set<AnyCancellable>()
        // MARK: Initialization
        init() {
            self.$text
                .sink(receiveValue: { value in
                    self.currentValue = value
                })
                .store(in: &cancellables)
        }
    }

    // MARK: Properties
    private let textFieldPublisher = PassthroughSubject<(String?, TextInputErrorState), Never>()
    private let output: PassthroughSubject<(name: String?, error: TextInputErrorState), Never>
    private let textInputType: TextInputType

    @State private var cancellable = Set<AnyCancellable>()
    @State private var inputErrorState: TextInputErrorState = .none
    @State private var isAnimated = false
    @State private var textBinding: String = ""
    private var isEditable: Bool = true
    @FocusState private var isFocused: Bool
    @ObservedObject var model: TextInputField.Model = TextInputField.Model()
    @Binding private var focusField: Bool

    // MARK: Initialization
    init(title: String,
         output: PassthroughSubject<(name: String?, error: TextInputErrorState), Never>, inputType: TextInputType = .firstName,
         currentValue: String = "" ,
         preValue: String = "",
         isEditable: Bool = true,
         focusField: Binding<Bool>) {
        self.textInputType = inputType
        self.output = output
        model.placeholder = title // <- 'self' used before all stored properties are initialized
        if !preValue.isEmpty {
            model.text = preValue // <- 'self' used before all stored properties are initialized
        }
        if !currentValue.isEmpty {
            model.text = currentValue // <- 'self' used before all stored properties are initialized
        }
        
        self._focusField = focusField
        self.isEditable = isEditable
    }

Вы манипулируете чем-то в self (в частности, model сначала), прежде чем вы инициализируете все свойства в self (например, focusField)

jnpdx 10.01.2023 20:40

Не имеет отношения, но у вас есть утечка в вашем коде комбината — вы должны использовать [weak self] в своем sink

jnpdx 10.01.2023 20:41
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел &quot;Заголовок&quot; в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
0
2
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Переместите self._focusField = focusField сразу после self.output = output в свой init(title: String, output: ....). Причина ошибки указана в сообщении об ошибке.

Обратите внимание, что в вашем TextInputField отсутствует требуемый вид.

Спасибо, что решили эту проблему, английский не мой родной язык, поэтому иногда мне трудно понять сообщения.

Bruno 11.01.2023 10:37

Хороший момент, я постараюсь сделать мои ответы/комментарии более понятными в будущем.

workingdog support Ukraine 11.01.2023 10:46

Другие вопросы по теме