gpt4 book ai didi

ios - 如何使用 Swift 4 在 Xcode 中创建具有多个 View Controller 的自定义模型实例?

转载 作者:行者123 更新时间:2023-11-28 07:48:33 25 4
gpt4 key购买 nike

我是 Swift 的新手,我确信这个问题非常基础,之前已经有人问过和回答过。

我没有使用 storyBoard。我的主要 viewController 是通过代码从 AppDelegate 创建的。

我有:

  • 在 model.swift 文件中定义的自定义类
  • 我用作容器的主要 viewController(来自 AppDelegate)
  • 3 个额外的 View Controller 作为主视图的 subview (不是彼此)
  • 所有 3 个 subview 同时显示,每个 subview 覆盖屏幕的 1/3(无 segues)
  • 每个 View Controller 都在一个单独的 .swift 文件中

我想在主 viewController 中创建自定义类的实例,并让所有 3 个 subview 都能够引用该实例。

每个 subview View Controller 都需要能够获取/设置实例变量,并且其他 subview 需要了解这些更改。

我认为我需要使用通知来将更改传达给多个 subview - 但我什至还没有开始尝试弄清楚这一点。

如果这个问题已经被问过并回答过 - 有人可以提供一个链接 - 或者为我提供正确的搜索词以便我能够找到答案吗?我发现的唯一接近的答案是使用 segues 来回传递数据。

最佳答案

您可以使用委托(delegate)模式。下面的代码假设您正在使用 MVVM 模式。 (对于 VIPER/ReSwift 模式也非常相似)

protocol DataChangedDelegate {
func refreshData()
}

// ViewModel for FirstViewController
class FirstViewModel {
var delegate: DataChangedDelegate?

var data: Any {
didSet {
delegate?.refreshData()
}
}
//rest of the things
}

//similarly other two view models will have a delegate and on data change will call the refresh method

你的 View Controller 应该采用这个协议(protocol)

class FirstViewController: UIViewController, DataChangedDelegate {
//view controller code

//delegate code
func refreshDate() {
//tableView.reloadDate()
//collectionView.reloadDate()
//lableView.text = viewModel.data()
}
}

无论你在哪里创建 viewControllers 并添加为 subView,你都必须设置 viewModel 的委托(delegate)。

let firstViewController: FirstViewController = createFirstViewController()
let firstViewModel = FirstViewModel()
firstViewModel.delegate = firstViewController
firstViewController.viewModel = firstViewModel
mainViewController.addSubView(firstViewController.view)

与所有其他 View Controller 类似。

关于ios - 如何使用 Swift 4 在 Xcode 中创建具有多个 View Controller 的自定义模型实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50304253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com