使用枚举开关 -- Swift --- 一个可以走得很远

with enum switch -- Swift --- one can go far

遇到了这个困扰我的问题。我一直在看 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)

        }
}

基本上,我想要一个按钮有两个功能,首先按 sort UITableView Asc,然后按 sort UITableView Dec

嗯,您必须为 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)

          }
      }
}
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"。

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