用enum开关 - Swift ---一个人可以走远

时间:2015-11-27 20:04:14

标签: swift enums switch-statement swift2

这个问题确实困扰着我。我一直在看Stack Overflow试图找到解决方案,但找不到任何东西。

enum SortMails {
    case SortedMailAsc
    case SortedMailDec
}

var sortedMails: SortMails!

@IBAction func sortMails(sender: AnyObject) {

    switch sortedMails! { /* this is where i get fatal error: unexpectedly found nil while unwrapping an Optional value */

        case .SortedMailAsc:
            NSNotificationCenter.defaultCenter().postNotificationName("sortedMailAsc", object: nil)
        case .SortedMailDec:
            NSNotificationCenter.defaultCenter().postNotificationName("sortedMailDec", object: nil)

        }
}

基本上,我想要一个按钮有两个功能,先按排序UITableView Asc,再按排序UITableView Dec

2 个答案:

答案 0 :(得分:1)

var sort = "Asc"

@IBAction func sortMails(sender: AnyObject) {
    NSNotificationCenter.defaultCenter().postNotificationName("sortedMail" + sort, object: nil)

    sort = (sort == "Asc") ? "Dec" : "Asc"
}

提问者想要一个按钮,当触摸时按升序排序,然后再次触摸时降序。

上面的代码使用字符串来保存排序顺序。它被初始化为“Asc”升序。

触摸按钮时,会发布通知“sortedMailAsc”。

然后它将排序顺序更改为“Dec”以进行降序(这应该是“Desc”,但提问者使用“Dec”)。

第二次触摸该按钮时,代码会发布通知“sortedMailDec”并将排序顺序更改回“Asc”。

我们的想法是保持代码简单,避免重复。

答案 1 :(得分:0)

嗯,你必须为 sortedMails 设置一个值。但我建议使用选项。

enum SortMails {
   case SortedMailAsc
   case SortedMailDec
}

var sortedMails: SortMails?

@IBAction func sortMails(sender: AnyObject) {

      if let sortedMailsValue = sortedMails {
          switch sortedMailsValue {
             case .SortedMailAsc:
                 NSNotificationCenter.defaultCenter().postNotificationName("sortedMailAsc", object: nil)
             case .SortedMailDec:
                 NSNotificationCenter.defaultCenter().postNotificationName("sortedMailDec", object: nil)

          }
      }
}