С тех пор я по частям разделил свой код и свел его к этому простому проекту, который вы видите ниже. . Я подумал, что по логике при первом запуске загрузка файла в словарь Strings займет несколько секунд. Справедливо. Но даже если я запущу приложение, подожду 20 секунд (чтобы убедиться, что файл полностью загрузился в память), а затем начну печатать, клавиатура подтормаживает. Тем не менее, я могу прекрасно пролистать список из 70 000 слов. Никакого зависания там нет. Зависание происходит только в TextField, который даже не взаимодействует с массивом словарных строк и не осуществляет поиск в нем.
Может ли кто-нибудь объяснить мне, почему клавиатура тормозит и что я могу сделать, чтобы решить эту проблему? это? Заранее большое спасибо.
Код: Выделить всё
import SwiftUI
import Combine
class SearchViewModel: ObservableObject {
@Published var text: String = ""
}
struct SearchView: View {
@Environment(\.colorScheme) var colorScheme
@StateObject private var searchViewModel = SearchViewModel()
// Reading in a txt file of 70,000 lines of strings, each with a Spanish word and its English equivalent
@State var dictionaryStrings = (readFileIntoStringArray(fileName: "dictionaryFile")).sorted{$0 < $1}
var body: some View {
VStack() {
Spacer()
List(dictionaryStrings, id: \.self) { dictionaryLine in
Text(dictionaryLine)
.listStyle(.plain)
.scrollDismissesKeyboard(.interactively)
let borderColor = colorScheme == .dark ? Color.white : Color.black
TextField("Search Spanish or English", text: $searchViewModel.text)
.padding()
.overlay(RoundedRectangle(cornerRadius: 10.0).strokeBorder(borderColor, style: StrokeStyle(lineWidth: 1.5)))
.padding()
.onReceive(searchViewModel.$text.debounce(for: .milliseconds(800), scheduler: DispatchQueue.main)) {_ in
// Removed all work
}
.modifier(TextFieldClearButton(text: $searchViewModel.text))
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... s-lags-why