iOS SwiftUI - 无法转换 ObservedObject 类型的值

use*_*083 4 swift swiftui

我有这样的看法:

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 是一场不直观的噩梦:(

请帮忙

Asp*_*eri 7

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)