【发布时间】:2022-01-22 21:20:52
【问题描述】:
我有一个 Storyboard UIKIT 函数 getAcctBalance()。在我的 UIKIT 文件中,我显示了一个 UIHostingController 来加载一个 SWIFTUI 视图。在 SWIFTUI 视图中,我想调用我的函数 getAcctBalance()。
SWIFTUI:
import SwiftUI
import SWXMLHash
struct UserDashboard: View {
@ObservedObject var userModel: UserDashboardModel
Button(action: {
UserDashboardHostVC.getAcctBalance() //This function call is not working
}){
Text("Load Balance")
}
Text(userModel.totalBalance) //by default it is 0.0 and when button is pressed it should return 599
}
UIKIT:
import UIKit
class UserDashboardModel: ObservableObject {
@Published var totalBalance = 0.0
}
class UserDashboardHostVC: UIViewController {
var userModel = UserDashboardModel()
override func viewDidLoad() {
super.viewDidLoad()
let controller = UIHostingController(rootView: UserDashboard(userModel: self.userModel))
controller.view.translatesAutoresizingMaskIntoConstraints = false
self.addChild(controller)
self.view.addSubview(controller.view)
controller.didMove(toParent: self)
}
func getAcctBalance {
userModel.totalBalance = 599
}
【问题讨论】:
-
这似乎有点超出我的想象,我没有看到在这篇文章中使用了 UIHostingController。
-
这就是为什么我没有将它作为重复发布但它非常相似。在链接中,您从 SwiftUI 开始,然后是
UIViewController,因此您需要UIViewControllerRepresentable。您从UIViewController开始,然后通过主机控制器进入 SwiftUI。但是沟通是一样的。UserDashboardModel需要持有对UserDashboardHostVC的引用,因此Button可以调用UserDashboardModel中的方法,然后将调用UserDashboardHostVC中的方法,就像各种委托一样。