Разделение строки в массив string.components (separtedBy: ",") занимает больше времени - PullRequest
1 голос
/ 02 октября 2019

У меня есть текстовый файл, который содержит 18000 строк с названиями городов. У каждой строки есть название города, штат, широта, долгота и т. Д. Ниже приведена функция, которая делает это, если я не реализую string.components(separtedBy: ", ") Функция загрузки довольно быстрая, но с ее внедрением требуется время, которое заставляет мой пользовательский интерфейс зависать. Как правильно это сделать? Разве это string.components(separtedBy: ", ") это дорого?

Я профилировал приложение, эта строка отбирает string.components(separtedBy: ", ") 1,45 с 2,09 с во всей функции.

func readCitiesFromCountry(country: String) -> [String] {
        var cityArray: [String] = []
        var flag = true
        var returnedCitiesList: [String] = []

        if let path = Bundle.main.path(forResource: country, ofType: "txt") {
            guard let streamReader = StreamReader(path: path) else {fatalError()}
            defer {
                streamReader.close()
            }
            while flag {
                if let nextLine = streamReader.nextLine() {
                    cityArray = nextLine.components(separatedBy: ",") // this is the line taking a lot of time, without this function runs pretty fast
                    if (country == "USA") {
                        returnedCitiesList.append("\(cityArray[0]) , \(cityArray[1]) , \(cityArray[2])")
                    } else {
                        returnedCitiesList.append("\(cityArray[0]) , \(cityArray[1])")
                    }
                   //returnedCitiesList.append(nextLine)
                } else {
                    flag = false
                }
            }
        } else {
            fatalError()
        }

        return returnedCitiesList
    }

StreamReader, используемый в коде, можно найти здесь. Это помогает читать файл построчно Читать файл / URL построчно в Swift

Этот вопрос не о том, как разбить строку на массив Разделить строкув массив в Swift? , а точнее, почему разделение занимает больше времени в данной функции.

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