gpt4 book ai didi

ios - 用简洁的方式在 Swift 中重构 Switch-Case

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

在此示例中,DisplayDataItem 协议(protocol)符合某些类(即 DisplaySingle),它简单地包含 cellType、标题和类型等属性。 对于显示单个横幅,其他类型也可以是 slider 、轮播。

我喜欢将 createBanner() 方法重构为更简洁的方法,而不是 switch-case。

什么是面向协议(protocol)的方式?

  public enum DisplayType: String {
case Single = "Single"

func value() -> String {
return self.rawValue
}
}

protocol DisplayDataItem {
var cell: DisplayCellType { get }
var title: String { get }
var displayType: DisplayType { get }
}

final class ViewModel: NSObject {
private(set) var banner: Banner?
var item: DisplayDataItem?

init(banner: Banner? = nil) {
super.init()
self.banner = banner
}

public func createBanner() -> DisplayDataItem {
var item: DisplayDataItem?
if let banner = banner {
let displayType = DisplayType(rawValue: banner.displayType ?? "Single")
switch displayType {
case .Banner:
item = DisplaySingle(banner: banner)
case .Slider:
item = DisplaySlider(banner: banner)
case .none:
break
}
}

return item
}

最佳答案

我不明白你的代码。但你的意图多少有些被理解了。

我会将getItem方法变成DisplayType

public enum DisplayType: String {
case single = "Single"
case slider = "Slider"
}

extension DisplayType {
func getItem(_ banner: Banner) -> DisplayDataItem {
switch self {
case .single:
return DisplaySingle(banner: banner)
case .slider:
return DisplaySlider(banner: banner)
}
}
}

我假设 ViewModelBanner?DisplayDataItem?Banner 对象有 DisplayType

public func createBanner() -> DisplayDataItem? {
self.item = self.banner?.displayType.getItem(banner)
return self.item
}

关于ios - 用简洁的方式在 Swift 中重构 Switch-Case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58282030/

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