У меня есть существующий проект с iOS10 и далее, я обновился до iOS13 и использую представления SwiftUI, это представление swiftUI загружается с помощью UIHostingController
let vc = UIHostingController(rootView: HomeView(viewModel: HelloViewModel()))
self.navigationController?.pushViewController(vc, animated: true)
Моя модель просмотра имеет @Published public var sampData = ["Ramu","somu","Beemu","Kaamu"], и, на мой взгляд, она использовалась.
Первое: просмотр не перезагружается, пока данные обновляются, либо добавляются новые элементы, либо удаляются существующие. и имеет странную ошибку, например "Тип" Цвет "не имеет элемента" красный "", я не знаю, что вызывает проблему.
struct AllergiesView: View {
@ObservedObject var viewModel : HelloViewModel
var body: some View {
ZStack {
Color.red
ScrollView {
ForEach(viewModel.sampData , id : \.self) { data in
NavigationLink(
destination: Text("Hello")){
Text(data)
}
}
}
}
.onAppear(){
}
.navigationBarTitle("Users")
}
}
и моя инициализация модели просмотра выглядит так
init() {
var runCount = 0
Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true) { timer in
DispatchQueue.main.async {
self.sampData.append("\(runCount)")
}
print(self.sampData)
runCount += 1
if runCount == 5 {
timer.invalidate()
}
}
}
Что вы пытаетесь раскрасить красным? Обычно вы помещаете цвет в качестве модификатора на что-то, поэтому в этом случае, если вы пытаетесь раскрасить свой ZStack, вы помещаете его после закрывающей скобки ZStack
главное, чтобы UI не перезагружался
Добро пожаловать в SO - пожалуйста, возьмите тур и прочтите Как спросить, чтобы улучшить, отредактировать и отформатировать свои вопросы. Без Минимальный воспроизводимый пример невозможно помочь вам в устранении неполадок.
@ rlong405 Color соответствует View в SwiftUI, поэтому его можно использовать, как показано.
@Prathap Я просто загрузил ваш код в новое приложение SwiftUI, и оно сработало без каких-либо проблем. Одна вещь, которую я бы сделал, - это установить точку останова или добавить print в вашу модель представления init. Если вы создадите модель представления в неправильном месте в иерархии представлений, вы можете столкнуться с ситуацией, когда новые модели представления постоянно создаются в качестве представления. воссоздана иерархия,
Да, для нового проекта он работает нормально, но это новый экран в существующем проекте (xib), элементы добавляются в массив нормально, но пользовательский интерфейс не обновляется
Можете ли вы добавить еще код? А минимальный воспроизводимый пример? Как HelloViewModel связан с AllergiesViewModel?
@ Paulw11 это та же модель представления, и я передал эту модель представления в качестве параметра конструктора. Если я создаю новый проект, он работает нормально, тот же код не работает в существующем проекте.





Возможно, Color - это тип, который вы определили в другом месте, и SwiftUI делает вывод об этом вместо типа Color SwiftUI? Если это так, вы можете устранить неоднозначность, изменив Color на SwiftUI.Color