У меня есть текстовый файл, который содержит 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? , а точнее, почему разделение занимает больше времени в данной функции.