Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 敏捷的工作日问题的位掩码。开关位_Swift_Enums - Fatal编程技术网

Swift 敏捷的工作日问题的位掩码。开关位

Swift 敏捷的工作日问题的位掩码。开关位,swift,enums,Swift,Enums,我有一个从周一到周日的表格视图。我可以使用位掩码来表示选择/取消选择它们 例如,如果我选择全部,则二进制为1111111,十进制为127。我找到了一个枚举示例,但无法识别如何从枚举中获取整数,然后在需要时再次将该数字转换为选定的天数 假设我选择了表中的所有日期,然后离开该表并再次打开它。因此,在我的数据中,有127个代表我选择的所有天数,例如,可以选择2天或3天。所以我想勾选这些日子作为选中日期。但我只有一个小数 更好的方法是什么 以及如何写开关 我想应该是这样的: func markDaysA

我有一个从周一到周日的表格视图。我可以使用位掩码来表示选择/取消选择它们

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

假设我选择了表中的所有日期,然后离开该表并再次打开它。因此,在我的数据中,有127个代表我选择的所有天数,例如,可以选择2天或3天。所以我想勾选这些日子作为选中日期。但我只有一个小数

更好的方法是什么

以及如何写开关

我想应该是这样的:

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 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)
}
并将其用作:

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 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)
}
并将其用作:

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你每次帮助我,很好的解决方案!谢谢你每次都帮我,很好的解决方案!