2017-11-04 1 views
1
@IBAction func sortList(_ sender: Any) { 
    var stateOfList = 0 
    var sortedList = array 
    switch stateOfList { 
    case 0: 
     sortedList = array.sorted { ($0.priceUsd!) > ($1.priceUsd!) } 
     stateOfList = 1 
    case 1: 
     sortedList = array.sorted { ($0.priceUsd!) < ($1.priceUsd!) } 
     stateOfList = 2 
    case 2: 
     sortedList = array.sorted { ($0.rank) < ($1.rank) } 
     stateOfList = 0 
    default: 
     stateOfList = 0 
    } 


    array = sortedList 
    tableView.reloadData() 
    print(stateOfList) 
} 

Ich möchte ein Array zu sortieren und ändern Sie den Zustand der Liste nach dem Drücken einer Taste. Der zweite Druck sollte das Array in die andere Richtung sortieren. Aber der Compiler sagt mir "Wird nie ausgeführt werden". Was mache ich hier falsch?Überprüfen Zustand des Wertes mit Case-Anweisung nach dem Drücken einer Taste

Antwort

1

make var stateOfList eine Instanzeigenschaft des View-Controllers, um den Status zu speichern und im zweiten darauf zuzugreifen.

var stateOfList = 0 

Ihre Funktion wird wie

@IBAction func sortList(_ sender: Any) { 
    var sortedList = array 
    switch stateOfList { 
    case 0: 
     sortedList = array.sorted { ($0.priceUsd!) > ($1.priceUsd!) } 
     stateOfList = 1 
    case 1: 
     sortedList = array.sorted { ($0.priceUsd!) < ($1.priceUsd!) } 
     stateOfList = 2 
    case 2: 
     sortedList = array.sorted { ($0.rank) < ($1.rank) } 
     stateOfList = 0 
    default: 
     stateOfList = 0 
    } 

    array = sortedList 
    tableView.reloadData() 
    print(stateOfList) 
} 
+0

Sie meinen stateOfList eine Instanz Eigenschaft des View-Controller –

+0

@leoDabus ich es geändert, danke zu machen. –

0

var stateOfList ist nur eine lokale Variable in dieser Funktion. Es wird bei jedem Aufruf der Funktion auf 0 initialisiert, so dass immer nur der Fall 0 ausgeführt wird.

Sie müssen stateOfList eine Instanzvariable machen.

Verwandte Themen