У меня есть эта ошибка «я» используется до инициализации всех сохраненных свойств», это происходит, когда я добавляю свойство 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
}
Не имеет отношения, но у вас есть утечка в вашем коде комбината — вы должны использовать [weak self] в своем sink
Переместите self._focusField = focusField сразу после self.output = output в свой init(title: String, output: ....). Причина ошибки указана в сообщении об ошибке.
Обратите внимание, что в вашем TextInputField отсутствует требуемый вид.
Спасибо, что решили эту проблему, английский не мой родной язык, поэтому иногда мне трудно понять сообщения.
Хороший момент, я постараюсь сделать мои ответы/комментарии более понятными в будущем.
Вы манипулируете чем-то в self (в частности, model сначала), прежде чем вы инициализируете все свойства в self (например, focusField)