Лист SwiftUi пуст при первом касании, но после этого работает правильно
У меня есть лист, который я помещаю вне цикла foreach. Когда я нажимаю на Tapgesture в первый раз, результаты пусты, после первого раза я получаю правильные данные для каждой строки, которую я нажимаю. Я читал Лист внутри ForEach не перебирает элементы SwiftUI, но он все еще не работает, это мой код. Если вы посмотрите на мой код, у меня есть переменная состояния с именем sharePost , которая при нажатии получает значение value.post , а затем переключатель shareSheet устанавливается в значение true . По какой-то причине я не могу получить значение при первом нажатии. У кого-нибудь есть предложения по устранению этой проблемы
struct TimeLineView: View {
@Binding var model: [MainModel]
@Binding var isMainView: MainViewEnum
@State var shareSheet = false
@State var PostIDState = 0
@State var sharePost = ""
var body: some View {
ZStack
{
let result = model.sorted {
$0.id! > $1.id!
}
ForEach(result) { value in
HStack {
Image("share")
.resizable()
.frame(width: 28, height: 28)
.onTapGesture {
sharePost = value.post
shareSheet.toggle()
}
}
}
}.sheet(isPresented: $shareSheet)
{
ShareView(message:"\(sharePost)" )
}
}
}
2 ответа
Чтобы решить эту проблему, одним из решений является реализация модификатора листа следующим образом:
.sheet(isPresented: Binding(
get: { shareSheet },
set: { shareSheet = $0 }
)) {
ShareView(message:"\(sharePost)" )
}
По-видимому, одним из обходных путей для этого является использование
StateObject
вместо
State
. Вот статья на Medium, демонстрирующая решение .