gpt4 book ai didi

swift 。工作日问题的位掩码。开关位

转载 作者:搜寻专家 更新时间:2023-11-01 06:18:17 25 4
gpt4 key购买 nike

我有一个表格 View ,其中包含周一到周日的日期。我可以使用位掩码来表示选择/取消选择所有这些。

例如,如果我选择所有这些,我将得到二进制的 1111111 或十进制的 127。我找到了一个枚举示例,但无法识别如何从枚举中获取整数,然后在需要时再次将该数字转换为选定的天数。

假设我在表格中选择了所有日期,然后我离开该表格并再次重新打开它。所以在我的数据中我有 127 代表我选择的所有天数(例如可以选择 2 或 3 天)。所以我想勾选这些日子是否已选中。但我只有一个小数点。

更好的方法是什么?

以及如何编写switch

我猜应该是这样的:

func markDaysAsSelctedWith(number: Int)
{
switch (number) {
case Days.Monday
case Days.Sunday
}

这是我的问题:如果我使用数字 12 来表示选定的星期三和星期四:

M = 1,
Tu = 2,
W = 4,
Th = 8,
F = 16,
Sa = 32,
Su = 64

那么switch就不行了...

最佳答案

在您的情况下,考虑采用 OptionSetType

通过声明符合OptionSetType 的结构:

(假设您仍在使用 Swift 2。)

struct Days: OptionSetType {
var rawValue: Int
init(rawValue: Int) {self.rawValue = rawValue}

static let Monday = Days(rawValue: 1<<0)
static let Tuesday = Days(rawValue: 1<<1)
static let Wednesday = Days(rawValue: 1<<2)
static let Thursday = Days(rawValue: 1<<3)
static let Friday = Days(rawValue: 1<<4)
static let Saturday = Days(rawValue: 1<<5)
static let Sunday = Days(rawValue: 1<<6)
}

你可以这样写:

func markDaysAsSelectedWith(days: Days)
{
if days.contains(.Monday) {
print("Monday marked")
}
if days.contains(.Tuesday) {
print("Tuesday marked")
}
if days.contains(.Wednesday) {
print("Wednesday marked")
}
if days.contains(.Thursday) {
print("Thursday marked")
}
if days.contains(.Friday) {
print("Friday marked")
}
if days.contains(.Saturday) {
print("Saturday marked")
}
if days.contains(.Sunday) {
print("Sunday marked")
}
}

并将其用作:

markDaysAsSelectedWith([.Monday,.Tuesday])
//Output:
//Monday marked
//Tuesday marked
let number = 12
let days = Days(rawValue: number)
markDaysAsSelectedWith(days)
//Output:
//Wednesday marked
//Thursday marked

(添加)如何从选定的日期中获取数字

如 Martin R 的评论中所述,您可以使用 rawValue 属性检索底层 rawValue:

let otherDays: Days = [.Wednesday,.Thursday]
print(otherDays.rawValue) //->12

关于 swift 。工作日问题的位掩码。开关位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39490054/

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