PreviewProvider на SwiftUI не загружается

сегодня мне интересно, можно ли работать над созданием представления на SwiftUI с помощью PreviewProvider Это сложно, когда у вас есть модели, потому что вам нужно «инициализировать» каждую модель и атрибут, чтобы увидеть эмулятор пользовательского интерфейса. Бывший

    struct SimpleView: View {
    
    @State private var number : Int 
    
    
    var body: some View {
        ScrollView{
            VStack{
                Text(String(number))
            }
        }
    }
}


struct SimpleView_Previews: PreviewProvider {
    static var previews: some View {
        SimpleView(Int: 5)
    }
}

Предварительный просмотр пользовательского интерфейса работает хорошо!

Но что, если мне нужно использовать пользовательский объект с 40-70 свойствами... :(

Есть ли способ работать без «жесткого кода» в начале?

Большое спасибо

Обычно я либо создаю MockViewModel подкласс соответствующего ViewModel, либо, если модель представления является структурой, я создаю статическую функцию в структуре, которая возвращает соответствующий «фиктивный» экземпляр структуры.

Paulw11 10.12.2020 02:00

с 40-70 свойствами - никогда так не делайте - разделяйте на мелкие части, чем меньше, тем лучше.

Asperi 10.12.2020 05:08

Я попытаюсь разделить эти модели, потому что загружать всю модель раздражает (к сожалению, существует так много моделей, которые работают вместе! Я имею в виду адресную форму с 20 атрибутами, такими как почтовый индекс, электронная почта, имя, телефон... Это беспорядок)

Antonio Labra 10.12.2020 06:55

@ Paulw11, не могли бы вы показать мне пример, пожалуйста?

Antonio Labra 10.12.2020 06:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
533
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из подходов — создать свойство класса mockViewModel, которое возвращает экземпляр с фиксированными значениями, которые можно использовать для предварительного просмотра.

В этом примере объект резервной модели является управляемым объектом Core Data.

При обычном использовании вы вызываете инициализатор ProjectDetailViewModel(project:).

Для предварительного просмотра вы можете использовать свойство mockViewModel

class ProjectDetailViewModel: ObservableObject {
    
    @Published var name: String {
        didSet {
            self.project.name = name
        }
    }
    
    @Published var notes: String {
        didSet {
            self.project.notes = notes
        }
    }
    
    let project: Project!
    
    init(project: Project) {
        self.project = project
        name = project.name ?? ""
        notes = project.notes ?? ""
    }
    
    private init() {
        project = nil
        name = "Mock project"
        threePhase = false
        notes = "Mock Notes"
    }
    
    static var mockViewModel:ProjectDetailViewModel {
        return ProjectDetailViewModel()
    }
    
}


struct ProjectDetailView_Previews: PreviewProvider {
    static var previews: some View {
        ProjectDetailView(project: ProjectDetailViewModel.mockViewModel)
    }
}

Другие вопросы по теме