сегодня мне интересно, можно ли работать над созданием представления на 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 свойствами... :(
Есть ли способ работать без «жесткого кода» в начале?
Большое спасибо
с 40-70 свойствами - никогда так не делайте - разделяйте на мелкие части, чем меньше, тем лучше.
Я попытаюсь разделить эти модели, потому что загружать всю модель раздражает (к сожалению, существует так много моделей, которые работают вместе! Я имею в виду адресную форму с 20 атрибутами, такими как почтовый индекс, электронная почта, имя, телефон... Это беспорядок)
@ Paulw11, не могли бы вы показать мне пример, пожалуйста?
Один из подходов — создать свойство класса 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)
}
}
Обычно я либо создаю
MockViewModel
подкласс соответствующегоViewModel
, либо, если модель представления является структурой, я создаю статическую функцию в структуре, которая возвращает соответствующий «фиктивный» экземпляр структуры.