Свифт словарь автоматически меняет порядок элементов [Swift] - PullRequest
0 голосов
/ 25 августа 2018

В моем быстром приложении есть следующая функция:

func generateTimetable() -> [String:String] {

    var dayCellTFText = [String]()

    for i in 1...7 {
        let cell = tableView.cellForRow(at: [0,i]) as! DayCell
        dayCellTFText.append(cell.timetableTextField.text!)
    }

    let timetable = ["monday":dayCellTFText[0],"thuesday":dayCellTFText[1],"wednesday":dayCellTFText[2],"thursday":dayCellTFText[3],"friday":dayCellTFText[4],"saturday":dayCellTFText[5],"sunday":dayCellTFText[6]]
    return timetable
}

Когда я вызываю функцию, например, print (generateTimetable ()) Это вывод:

["thuesday": "", "wednesday": "", "saturday": "", "thursday": "", "monday": "", "friday": "", "sunday": ""]

Проблема в том, что элементы словаря поменялись местами! Как я могу решить это?

1 Ответ

0 голосов
/ 25 августа 2018

Использование [String : String] - неправильный выбор для возвращаемого значения generateTimetable().Если вы хотите упорядоченную коллекцию, вы должны использовать массивы.Вопрос в том, какой будет тип, содержащийся в массиве?Вот два возможных решения:

  1. Кортеж:

    func generateTimetable() -> [(String,String)] {
    
        var dayCellTFText = [String]()
    
        for i in 1...7 {
            let cell = tableView.cellForRow(at: [0,i]) as! DayCell
            dayCellTFText.append(cell.timetableTextField.text!)
        }
    
        let timetable = [("monday",dayCellTFText[0]),
                         ("tuesday",dayCellTFText[1]),
                         ("wednesday",dayCellTFText[2]),
                         ("thursday",dayCellTFText[3]),
                         ("friday",dayCellTFText[4]),
                         ("saturday",dayCellTFText[5]),
                         ("sunday",dayCellTFText[6])]
        return timetable
    }
    
  2. Структура

    struct TableEntry {
        let nameOfDay: String
        let textFieldtext: String
    }
    
    func generateTimetable() -> [TableEntry] {
    
        var dayCellTFText = [String]()
    
        for i in 1...7 {
            let cell = tableView.cellForRow(at: [0,i]) as! DayCell
           dayCellTFText.append(cell.timetableTextField.text!)
        }
    
        let timetable = [ TableEntry(nameOfDay: "monday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "tuesday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "wednesday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "thursday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "friday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "saturday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "sunday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "monday", textFieldtext: dayCellTFText[0])]
        return timetable
    }
    

И, таким образом, тип возвращаемого значения будет упорядоченным.Если вы все еще заинтересованы в сортировке словаря по его ключам, здесь - это уже отвеченный вопрос.Но это предполагает, что ключи уже имеют числовой или алфавитный порядок (или любой порядок сортировки в этом отношении).Но строки "понедельник", "вторник", ..., "воскресенье" расположены не по алфавиту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...