在 ViewController 和 SwiftUI 之间共享变量

rac*_*ela 2 xcode uikit swift swiftui

这是我第一次在 Xcode 中工作,我正在使用 Storyboards/View Controllers 构建一个应用程序。但是,我想使用 SwiftUI 显示一个页面,这是我通过主机控制器完成的。我希望能够在我的 ViewController 代码中为一个变量赋值,然后在我的 swiftUI ContentView 文件中访问这个值。我觉得应该有一个简单的解决方案,但我似乎找不到在两者之间共享数据的方法。感谢您的任何帮助。

Bib*_*cob 5

这是一个简单的方法来查看如何将数据传递给SwiftUI Viewfrom UIKit UIViewController。在这里,我text在 的初始值设定项中传递一个简单的设置ContentView并呈现UIHostingControlleron ViewController。这是代码:

import UIKit
import SwiftUI
import PlaygroundSupport

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(action))
    }

    @objc func action() {
        let contentView = ContentView(text: "My Text")
        let viewController = UIHostingController(rootView: contentView)
        present(viewController, animated: true)
    }
}


struct ContentView: View {

    var text: String

    var body: some View {
        Text(text)
    }
}

PlaygroundPage.current.setLiveView(UINavigationController(rootViewController: ViewController()))
PlaygroundPage.current.needsIndefiniteExecution = true
Run Code Online (Sandbox Code Playgroud)

您可以在您的 Playground 上复制/粘贴此代码以查看它是如何工作的。