这个问题确实困扰着我。我一直在看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
答案 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)
}
}
}