Closed kocherovets closed 3 years ago
Здравствуйте. Ошибка говорит, что вы пытаетесь внедрить "Int" в TestView. Предположительно в коде это выглядит так:
struct TestView: View {
@State var value: Int = 0
}
...
container.register(TestView.init)
.injection(\.value)
Но value является переменной типа Int, который я сильно сомневаюсь, что зарегистрирован в контейнере (покрайней менее это былобы странно). Так как внедрить переменную нельзя, то библиотека сообщает о том, что внедрение не возможно, и надо или убрать внедрение, или зарегистрировать его.
Там в вопросе есть ссылка на проблемный код. Дело в том, что @State в SwiftUI - это стандартная обертка для данных, обрабатываемых View. И не всегда нужно их обрабатывать с помощью DI, во всяком случае это может быть неудобно. Можно ли как-то отключить DI для некоторых таких полей?
DI тут не причем. посмотрите на метод инициализации TestView. У него их по факту два:
TestView.init(presenter: )
TestView.init(presenter: , a: )
Не знаю по какой логике Swift решает что нужно использовать второй, но по умолчанию он выбирает его (в старых версиях swift обычно ругался, что много вариантов, ну или это особенность swiftUI). В общем проблему решить можно, указав явно что нужно использовать для инициализации:
container.register(TestView.init(presenter:))
// или
container.register { TestView(presenter: $0) }
Понял, спасибо. Отличная библиотека)
Добрый день!
Я добавляю в свою библиотеку поддержку SwiftUI, для DI использую DITranquality. @ObservedObject работает, а при добавлении @State падает с ошибкой проверки графа
error: Invalid reference from <Component. type: TestView; path: TestView.swift:67> because not found component for type: Int Fatal error: invalid graph: file
Не пойму в чем дело.