Я хочу создать PO C, используя SwiftUI и CoreML. Я использую простую кнопку для вызова некоторой функции (здесь она называется test
). Эта функция довольно тяжелая, поскольку она выполняет вывод CoreML, и ее вычисление может занять до минуты.
У меня есть несколько проблем:
Кнопка все еще остается активен, даже когда вычисления продолжаются. Другими словами, если я нажму кнопку несколько раз, прежде чем обработка первого щелчка будет завершена, обработка будет выполнена несколько раз. Я хочу отключить кнопку, пока обработка продолжается.
Я попытался изменить внешний вид кнопки, чтобы указать пользователю, что обработка продолжается. В приведенном ниже примере я меняю цвет кнопки на красный перед вызовом функции test
и снова меняю ее на синий после завершения обработки. Но это не работает.
В приведенном ниже коде функция test
просто спит в течение 5 секунд для имитации вывода CoreML.
func test() -> Void {
print("Start processing")
sleep(5)
print("End processing")
}
struct ContentView: View {
@State private var buttonColor : Color = .blue
var body: some View {
VStack {
Button(action: {
self.buttonColor = .red
test()
self.buttonColor = .blue
}) {
Text("Start")
.font(.title)
.padding(.horizontal, 40)
.padding(.vertical, 5)
.background(self.buttonColor)
.foregroundColor(.white)
}
}
}
}
Я думаю, что эта проблема очень проста для большинства из вас. Я просто не могу найти правильные ключевые слова для поиска, чтобы решить это самостоятельно. Спасибо за вашу помощь.