2016-04-18 87 views
1

我想訴諸我的桌子。 我有此代碼部分:在按鈕上按升序和降序進行排序之間交替點擊

func ReSort() { 
    CoreDataItems.sortInPlace({$0.RowName< $1.RowName}) 
    tableView.reloadData() 
} 

此功能將在按下按鈕後調用。 但我怎麼能解決這個問題,如果我按下按鈕,在第一時間裏,排序函數會像這樣排序是:

$0.RowName < $1.RowName 

和第二次是這樣的:

$0.RowName > $1.RowName 

和等等。

回答

1

您需要將排序的當前狀態存儲在實例變量中,例如,現在

var sortAscending : Bool = true 

,你可以這樣做:

func ReSort() { 
    CoreDataItems.sortInPlace({sortAscending ? $0.RowName < $1.RowName : $0.RowName > $1.RowName}) 
    sortAscending = !sortAscending 
    tableView.reloadData() 
} 

sortAscending值將>和比較<之間進行選擇。在排序之後完成的賦值

sortAscending = !sortAscending 

truefalse之間交替。

具有相同效果的較短,但略小於可讀代碼使用==操作者作爲替換爲倒置XORBool值:

func ReSort() { 
    CoreDataItems.sortInPlace({sortAscending == ($0.RowName < $1.RowName) }) 
    sortAscending = !sortAscending 
    tableView.reloadData() 
} 
+0

感謝,這工作正常:)是有使用可變insteads的方式的RowName常量? – Stack108

+0

@ Stack108歡迎您!我看到你的[其他問題](http://stackoverflow.com/q/36710670/335858),所以我假設你知道答案。 – dasblinkenlight