迅速。工作日问题的位掩码。切换位

时间:2016-09-14 12:07:44

标签: swift enums

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

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

我们说我选择了桌子上的所有日子,然后我离开那张桌子再次打开它。所以在我的数据中,我有127个代表我选择的所有日子(例如,它可以选择2或3天)。所以我想检查那些天被选中。但我只有一个小数。

最好的办法是什么?

如何撰写func markDaysAsSelctedWith(number: Int) { switch (number) { case Days.Monday case Days.Sunday }

我想这应该是这样的:

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

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

var escapestring ='<table id="tblUserList"><tbody><tr><td style="padding: 10px;">some test'+"'"+' and "xyz"</td></tr></tbody></table>';

然后切换不起作用......

2 个答案:

答案 0 :(得分:2)

对于每个表视图行(0 ... 6),检查相应的位是否相应 在它设置或未设置的位掩码中的位置,并选择或取消选择 因此排。例如:

    func download(_ path: String, _ completionHandler: @escaping (Any?) -> ()) {
        let stringURL = "https://slove.tulleb.com/uploads/6/6/0/2/66027561/2791411.jpg-1447979839.png"

        print("Requesting \(stringURL)...")

        _ = Alamofire.download(stringURL)
            .responseData { response in
                print(response)

                if let data = response.result.value {
                    completionHandler(UIImage(data: data))
                } else {
                    completionHandler(nil)
                }
        }
    }

输出:

select row # 0
deselect row # 1
select row # 2
deselect row # 3
deselect row # 4
deselect row # 5
select row # 6

答案 1 :(得分:2)

在您的情况下,请考虑采用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

(ADDITION)如何从选定日期获取号码

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

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