gpt4 book ai didi

ios - Swift:可以从许多地方访问的 ViewController 模式

转载 作者:行者123 更新时间:2023-11-28 14:06:48 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个可以从 3 个不同屏幕访问的“详细信息”屏幕/VC。

我目前正在使用构造函数依赖注入(inject)和 3 个不同的初始化器来根据用户的来源设置正确的变量。

仍然,大部分逻辑都在 ViewDidLoad 中,在非常丑陋的 ifs 下

写了一个小示例,让您了解它现在的样子:

if object != nil {

WebApi.fetchDropDown1 { items in
dropdown.selectedItem = items.first{$0.id == object.UnitId}
}

currentDateLabel = object.date
} else if object == nil && currentDate == nil {
// came to add from list of objects

// object doesn't exist yet

WebApi.fetchDropDown1 { items in
dropdown.selectedItem = items[0] // select first availabile
}

currentDateLabel = Date() // set today as default date
deleteButton.isEnabled = false
// something like that for every element

} else if { currentDate != nil && object == nil} {
// came here from calendar pick

WebApi.fetchDropDown1 { items in
dropdown.selectedItem = items[0] // select first availabile
}

currentDateLabel = currentDate

}

这不是实际代码,只是为了阐明我要解决的问题。

许多关于设计模式的教程只针对最简单的用例,而我无法为更复杂的用例找到一些有用的建议。

谢谢。

最佳答案

对于这个用例,我建议使用 enum

您可以像这样在 ViewController 之外声明一个公共(public)枚举:

public enum InitialiserType {
case typeOne
case typeTwo
case defaultType
}

像这样在您的 ViewController 中创建一个属性:

initialiserType:InitialiserType = .defaultType

如果未指定类型,将其设置为默认值将使默认初始化程序被调用。

另外,在viewDidLoad()中添加如下代码:

switch self.initialiserType {
case .typeOne:
print("Do the custom code for type one here")
case .typeTwo:
print("Do the custom code for type two here")
case .defaultType:
print("Do the default code here")
}

现在当你初始化 Viewcontroller 时,只需设置这个类型:

controller.initialiserType = .typeOne

根据您在此处设置的类型,初始化程序将相应地工作。

关于ios - Swift:可以从许多地方访问的 ViewController 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52924055/

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