如何在UIViewController和之间传递数据struct ContentView?
我试过,ObservableObject但我无法获得最新的数据。
我发现现有的答案令人困惑/不完整,也许 Swift 5.3 等中的通用推理发生了一些变化。虽然您可以将环境对象添加到 UIHostingController 的视图中,但这似乎与类型冲突(即 UIHostingController 的通用参数需要具体类型) 。添加AnyView解决了这个问题:
import UIKit
import SwiftUI
struct TutorialView: View {
@EnvironmentObject private var integration: TutorialIntegrationService
var body: some View {
Text("Hi").navigationBarTitle("test: \(integration.id)")
}
}
class TutorialIntegrationService: ObservableObject {
@Published var id: Int = 0
}
class TutorialViewController: UIHostingController<AnyView> {
let integration = TutorialIntegrationService()
required init?(coder: NSCoder) {
super.init(coder: coder,rootView: AnyView(TutorialView().environmentObject(integration)));
}
}
Run Code Online (Sandbox Code Playgroud)
要将数据从 a 传递到 aUIViewController内的 SwiftUI-Struct ,UIHostingController您可以将 an 附加environmentObject到 SwiftUI rootView:
let vc = UIHostingController(rootView: YourContentView().environmentObject(yourEnvironmentObject))
Run Code Online (Sandbox Code Playgroud)
当然,您需要创建一个 ObservableObject 并将其添加到您的 SwiftUI-Struct。
创建可观察对象:
class TypeOfEnvironmentObject: ObservableObject {
@Published var data = "myData"
}
Run Code Online (Sandbox Code Playgroud)
将其添加到您的结构中:
@EnvironmentObject var yourEnvironmentObject: TypeOfEnvironmentObject
Run Code Online (Sandbox Code Playgroud)
添加class myclassname: ObservableObject
在类中创建一个变量并@Published var myvar添加:
init(myvar: type) {
self.myvar = myvar
}
Run Code Online (Sandbox Code Playgroud)
添加UIViewController:
private var model = myclassname(myvar: XXX)`
Run Code Online (Sandbox Code Playgroud)
并viewWillAppear添加:
let vc = myclassname(myvar: myvar)
let childView = UIHostingController(rootView: ContentView(model: vc))
Run Code Online (Sandbox Code Playgroud)
在添加中struct:
@ObservedObject var model: myclassname
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2207 次 |
| 最近记录: |