В моем коде SwiftUI есть следующий код:
@Binding var tabSelection: Int
init() {
UINavigationBar.appearance().barTintColor = .clear
UINavigationBar.appearance().backgroundColor = .clear; UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
UINavigationBar.appearance().shadowImage = UIImage()
}
Но когда я пытаюсь скомпилировать свой код, я получаю такую ошибку:
Если я удалю этот код, я смогу успешно скомпилировать свое приложение:
init() {
UINavigationBar.appearance().barTintColor = .clear
UINavigationBar.appearance().backgroundColor = .clear; UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
UINavigationBar.appearance().shadowImage = UIImage()
}
Может кто-нибудь посоветовать по этому поводу?





Обычно, когда вы создаете View, поскольку это struct, Xcode синтезирует для вас инициализаторы. Это означает, что вы передаете Binding в качестве параметра, и он автоматически настраивается для вас.
В этом случае, поскольку вы определили свой собственный init, вам также необходимо взять этот параметр Binding и инициализировать свое собственное свойство.
struct MyView : View {
@Binding var tabSelection: Int
init(tabSelection: Binding<Int>) {
_tabSelection = tabSelection //<-- Here (have to use the underscore because of the `@Binding` -- see the link later in the post
UINavigationBar.appearance().barTintColor = .clear
UINavigationBar.appearance().backgroundColor = .clear; UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
UINavigationBar.appearance().shadowImage = UIImage()
}
var body: some View {
Text("Hello, world!")
}
}
См. Также: SwiftUI: как реализовать собственный init с переменными @Binding