如何在另一个视图中更改类的布尔实例?

问题描述

我想在一个视图中点击一个按钮,然后在另一视图中更改文本。 更改布尔值的按钮在LessonOne上,我想在我的ContentView中显示的文本。

第一课中的代码是:

import React,{ Component } from 'react'

class ErrorBoundary extends Component {

    constructor (props){
        super(props);

        this.state = {
            hasError: false,error: null,info: null
        }
    }

    static getDerivedStateFromError(error){
        this.state.hasError = true
    }

    componentDidCatch (error,info){
        console.log(error);
        console.log(info)
    }

    render() {
        if(this.state.hasError){
            return <h2>Something went wrong</h2>
        }
        return this.props.children;
    }
}

export default ErrorBoundary;

ContentView中的代码是:

import SwiftUI
import Combine

class LessonTwoButton: ObservableObject {
    let didChange = PassthroughSubject <Void,Never >()
    var ButtonIsTapped = false {didSet {didChange.send()}}
}

struct LessonOne: View {
    
    @Observedobject var ActivateNextLesson = LessonTwoButton ()
    
    var body: some View {
        
        vstack{
            Button (action: {
                self.ActivateNextLesson.ButtonIsTapped.toggle()
            },label: {
                Text("Activate the next lesson")
            })
            
        }
        
    }
    
}

代码可以运行,但是它没有绑定……我继续进行LessonOne,点击按钮,返回ContentView,什么都没有改变。你能告诉我该怎么办吗?

解决方法

您需要在两个视图中使用相同的LessonTwoButton实例:

struct ContentView: View {
    @ObservedObject var lessontwobutton = LessonTwoButton() // create in parent only
    ...
struct LessonOne: View {
    @ObservedObject var ActivateNextLesson: LessonTwoButton // declare only
    ...
}
NavigationLink(
    destination: LessonOne(ActivateNextLesson: lessontwobutton),// pass here
    label: {
        Text("Next view")
    }
)

LessonTwoButton可以简化:

class LessonTwoButton: ObservableObject {
    @Published var ButtonIsTapped = false
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...