我有这样的看法:
struct CreateAccountButton : View {
@Binding var viewRouter: ViewRouter
var body: some View{
Button(action: {
withAnimation {
viewRouter.currentPage = .register
}
}) {
Text("create_account")
.padding(.vertical)
.frame(maxWidth: .infinity)
.foregroundColor(Color("ColorText"))
.overlay(
RoundedRectangle(cornerRadius: 5)
.stroke(Color.white, lineWidth: 0))
}
.background(Color("BtnGreenBG"))
.frame(minWidth: 0, maxWidth: .infinity)
.cornerRadius(5)
.padding(.top, 12)
}
}
Run Code Online (Sandbox Code Playgroud)
我需要传递我在主视图中创建的 viewRouter:
@StateObject var viewRouter: ViewRouter
Run Code Online (Sandbox Code Playgroud)
我试过:
CreateAccountButton(viewRouter: $viewRouter)
Run Code Online (Sandbox Code Playgroud)
并得到:
Cannot convert value of type 'ObservedObject<ViewRouter>.Wrapper' to expected argument type 'Binding<ViewRouter>'
Run Code Online (Sandbox Code Playgroud)
我是 ios/swiftui 新手,不明白这个错误。
基于这个答案:
我们如何在 SwiftUI 中将 ObservedObject 类型的值转换为 Binding?
我变了
@Binding var viewRouter: ViewRouter
Run Code Online (Sandbox Code Playgroud)
到
@ObservedObject var viewRouter: ViewRouter
Run Code Online (Sandbox Code Playgroud)
在 CreateAccountButton 内,它仍然不起作用
与 Kotlin 相比,SwiftUI/Swift 是一场不直观的噩梦:(
请帮忙
这ObservableObject
是一个引用类型,因此我们可以直接通过引用传递它,不需要绑定。
struct CreateAccountButton : View {
let viewRouter: ViewRouter // << regular property
// if needed to observe it internally, ie. body (not closures)
// contains router's property usage
// @ObservedObject var viewRouter: ViewRouter
// ...
Run Code Online (Sandbox Code Playgroud)
并打电话
CreateAccountButton(viewRouter: viewRouter) // inject reference
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2860 次 |
最近记录: |