gpt4 book ai didi

swift - 嵌套枚举以允许多个时间范围

转载 作者:搜寻专家 更新时间:2023-10-31 22:24:20 25 4
gpt4 key购买 nike

我希望实现某种风格的枚举语法/功能,但我不确定如何实现它。目前我有以下内容:

internal enum Timeframe: Equatable {

// MARK: - Cases

case hour(count: Int)
case day(count: Int)
case week(count: Int)
case month(count: Int)
case year(count: Int)
case all
case exact(date: Date)
case unspecified
}

除非需要,否则我想消除计数关联值。例如:

let oneDayTimeframe: Timeframe = .day
let twoDayTimeframe: Timeframe = .day.multiplied(by: 2)

这可能吗?即使没有办法完全实现我正在寻找的东西,我也会很感激有关潜在改进的建议。在大多数情况下,我最终使用 (count: 1),这看起来有点冗长。如果默认值与关联值一起可用,我会使用

case hour(count: Int = 1)

有什么建议吗?

最佳答案

对您提供的答案进行一些迭代:

enum TimeFrame: Equatable {

case all
case countable(timeFrame: CountableTimeFrame)
case exact(date: Date)
}

enum CountableTimeFrame: Equatable {

case hour
case day
case week
case month
case year

indirect case multiple(CountableTimeFrame, Int)

var timeFrame: TimeFrame {
return .countable(timeFrame: self)
}

static func * (left: CountableTimeFrame, right: Int) -> CountableTimeFrame {
switch left {
case .multiple(let timeFrame, let count):
return .multiple(timeFrame, count * right)
default:
return .multiple(left, right)
}
}

static func * (left: Int, right: CountableTimeFrame) -> CountableTimeFrame {
return right * left
}
}

将禁止滥用,例如不允许:

let timeFrame: TimeFrame = .multiple(.exact(date: someDate), 666)
let timeFrame: TimeFrame = .multiple(unspecified, 40)
let timeFrame: TimeFrame = .multiple(all, -1)

并允许使用 * 运算符进行乘法运算,例如

let timeFrame: CountableTimeFrame = 4 * .hour
print(timeFrame) // multiple(__lldb_expr_5.CountableTimeFrame.hour, 4)
print(timeFrame * 2) // multiple(__lldb_expr_5.CountableTimeFrame.hour, 8)

和.unspecified:

let optionalTimeFrame: TimeFrame? = nil

关于swift - 嵌套枚举以允许多个时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54952954/

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