2015-11-27 26 views
0

得到這個問題,真的讓我感到困擾。我一直在看堆棧溢出嘗試找到一個解決方案,但找不到任何東西。與枚舉開關 - 斯威夫特 - 一個可以走遠

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月

+0

你需要給'sortedMails'一個值。 'var sortedMails = SortMails.SortedMailAsc'。 – vacawama

回答

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」。

這個想法是保持代碼簡單,避免重複。

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) 

      } 
     } 
}