Swift 敏捷的工作日问题的位掩码。开关位
我有一个从周一到周日的表格视图。我可以使用位掩码来表示选择/取消选择它们 例如,如果我选择全部,则二进制为1111111,十进制为127。我找到了一个枚举示例,但无法识别如何从枚举中获取整数,然后在需要时再次将该数字转换为选定的天数 假设我选择了表中的所有日期,然后离开该表并再次打开它。因此,在我的数据中,有127个代表我选择的所有天数,例如,可以选择2天或3天。所以我想勾选这些日子作为选中日期。但我只有一个小数 更好的方法是什么 以及如何写开关 我想应该是这样的:Swift 敏捷的工作日问题的位掩码。开关位,swift,enums,Swift,Enums,我有一个从周一到周日的表格视图。我可以使用位掩码来表示选择/取消选择它们 例如,如果我选择全部,则二进制为1111111,十进制为127。我找到了一个枚举示例,但无法识别如何从枚举中获取整数,然后在需要时再次将该数字转换为选定的天数 假设我选择了表中的所有日期,然后离开该表并再次打开它。因此,在我的数据中,有127个代表我选择的所有天数,例如,可以选择2天或3天。所以我想勾选这些日子作为选中日期。但我只有一个小数 更好的方法是什么 以及如何写开关 我想应该是这样的: func markDaysA
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
然后开关将不起作用…对于每个表视图行0…6,检查相应的位是否在 在位掩码中定位它是否设置,并选择或取消选择 相应地划船。例如:
let selectedWeekdays = 69 // == 1 + 4 + 64
for i in 0..<7 {
if selectedWeekdays & (1 << i) != 0 {
print("select row #", i)
} else {
print("deselect row #", i)
}
}
输出:
select row # 0
deselect row # 1
select row # 2
deselect row # 3
deselect row # 4
deselect row # 5
select row # 6
对于每个表视图第0…6行,检查相应位置的位 在位掩码中定位它是否设置,并选择或取消选择 相应地划船。例如:
let selectedWeekdays = 69 // == 1 + 4 + 64
for i in 0..<7 {
if selectedWeekdays & (1 << i) != 0 {
print("select row #", i)
} else {
print("deselect row #", i)
}
}
输出:
select row # 0
deselect row # 1
select row # 2
deselect row # 3
deselect row # 4
deselect row # 5
select row # 6
在您的情况下,考虑采用optStudiType。< /P> 通过声明符合OptionSetType的结构:
假设您仍在使用Swift 2struct 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)
}
并将其用作:
markDaysAsSelectedWith([.Monday,.Tuesday])
//Output:
//Monday marked
//Tuesday marked
let number = 12
let days = Days(rawValue: number)
markDaysAsSelectedWith(days)
//Output:
//Wednesday marked
//Thursday marked
Addition如何从所选天数中获取数字
如Martin R的评论中所述,您可以使用rawValue属性检索基础rawValue:
let otherDays: Days = [.Wednesday,.Thursday]
print(otherDays.rawValue) //->12
在您的情况下,考虑采用optStudiType。< /P> 通过声明符合OptionSetType的结构:
假设您仍在使用Swift 2struct 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)
}
并将其用作:
markDaysAsSelectedWith([.Monday,.Tuesday])
//Output:
//Monday marked
//Tuesday marked
let number = 12
let days = Days(rawValue: number)
markDaysAsSelectedWith(days)
//Output:
//Wednesday marked
//Thursday marked
Addition如何从所选天数中获取数字
如Martin R的评论中所述,您可以使用rawValue属性检索基础rawValue:
let otherDays: Days = [.Wednesday,.Thursday]
print(otherDays.rawValue) //->12
使用OptionSet查看此示例使用OptionSet查看此示例谢谢您的回答,非常详细。另外,也许你知道如何从所选日期中获取数字,我的意思是,当我选择Wed和Thu时,我需要得到12。@MatrosovAlexander:days.rawValue提供了基本整数。谢谢你的回答,它非常详细。另外,也许你知道如何从选定的日期中获取数字,我的意思是,当我选择Wed和Thu时,我需要得到12。@MatrosovAlexander:days.rawValue为你提供了基本的整数。感谢Martin你每次帮助我,很好的解决方案!谢谢你每次都帮我,很好的解决方案!