如何将 ViewController 之间的数据更改为一个动作?

How can I change the data between ViewControllers as an action?

我在将数据作为动作在 ViewController 之间传递时遇到问题。这意味着以下内容:

ViewController1 - NavigationControllers, etc. - ...
                                                 |
                                                 |
ViewController2    -     -    -    -    -   -   ...

所以我有两个 ViewController。 ViewController1 有一个变量(比方说 var myName:String = "Joana") 我想通过单击 ViewController2 中的按钮来更改它。 我的问题是:我该怎么做(我知道如何在通过 segue 直接连接但不与操作结合的 VC 之间传递数据,这是我的问题)? 我听说过 prepare(for segue: UIStoryboardSegue, sender: Any?),但我认为它只有在两个 VC 之间存在一个 segue(直接)时才有效。 总结:

VC2: Button: action -> change var 'myname' on VC1 to 'hello', no direct segue.

提前感谢您的帮助! :-)

看看:

class FirstVC: UIViewController {
    var someAttribute: String = "ola!"

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard let segueIdentifier = segue.identifier else { return }
        if segueIdentifier == "YourSegueIdentifierFromStoryBoard" {
            guard let viewController = segue.destination as? SecondVC else { return }
            // someAttribute == "ola!"
            viewController.someButtonTappedHandler = { [weak self] (newValue) in
                guard let strongSelf = self else { return }
                strongSelf.someAttribute = newValue
                // someAttribute == "Bla Bla Bla!"
            }
        }
    }
}

class SecondVC: UIViewController {
    var someButtonTappedHandler: ((String) -> Void)?

    @IBAction func someButtonTapped() {
        if let handler = someButtonTappedHandler {
            handler("Bla Bla Bla!")
        }
    }
}

我现在解决了我的问题如下:

final class Singleton{
    private init(){ }

    static let shared = Singleton()

    var someInt: Int = Int()
}

所以我声明一个单例。 下一个:

class ViewControllerOne: UIViewController{
    [Outlets,...]
    override func viewDidLoad() {
        super.viewDidLoad()

        let integer = Singleton.shared.someInt
        print("We're in Class: ViewController and Singleton.shared.someInt = \(integer).\n")
        Singleton.shared.someInt = integer
        myLabel.text = "\(Singleton.shared.someInt)"
    }
}

第二个VC:

class ViewControllerTwo: UIViewController{
    [...]
    override func viewDidLoad() {
            super.viewDidLoad()

            let integer = Singleton.shared.someInt
            print("We're in Class: SecondVC and Singleton.shared.someInt = \(integer).\n")
            Singleton.shared.someInt = 5
            if Singleton.shared.someInt == 5{
                print("Singleton.shared.someInt changed to 5 in Class SecondVC.\n")
            }

        }
}

我的故事板是这样的:

The storyboard

如果有任何错误,请告诉我,但这对我有用。

另一个 link 我也找到了帮助:

Help