SwiftUI, как использовать один вид несколько раз
Источник : Creating a CardView
Работа в классе:
Введение:
Как структурировать данные?
Для того чтобы, использовать вид заново с новыми параметрами, следует создать структуру, содержащую все необходимые поля.

Выше приведен пример организации данных с типами, необходимый для заполнения каждой карточки.
Начните реализацию данного объекта, требуется сделать это в отдельном файле. Создайте новый файл с названием DailyScrum.swift, в папке UserModule.
Для того чтобы создать новый объект, нам надо создать его структуру. Начните со следующего кода:
import SwiftUI
public struct DailyScrum {
public var title: String
public var attendees: [String]
public var lengthInMinutes: Int
public var color: Color
public init(title:String, attendees:[String], lengthInMinutes:Int, color:Color){
self.title = title
self.attendees = attendees
self.lengthInMinutes = lengthInMinutes
self.color = color
}
}
Данный код создает следующие поля:
title, типаStringдля хранения титула карточки.attendees, типа[String]это массив строк, в котором хранятся имена участников карточки.lengthInMinutes, типаIntдля хранения длины события, целым числом.color, типаColorдля хранения цвета карточки.
Также нам необходимо создать инициализатор, который будет создавать наш объект, он должен быть public или публичным, чтобы мы имели к нему доступ из кода, расположенного в файле Main.swift.
Далее, в нашем Main.swift должен быть результат с нашего предыдущего урока:
import SwiftUI
import PlaygroundSupport
struct CardView: View {
let title: String
let count: String
let time: String
let color: Color
var body: some View {
VStack(alignment: .leading){
Text(self.title).font(.headline)
Spacer()
HStack{
Label(self.count,systemImage:"person.3").font(.subheadline)
Spacer()
Label(self.time, systemImage:"timer").font(.subheadline)
}
}.frame(width: 600, height: 40).padding().background(self.color)
}
}
PlaygroundPage.current.setLiveView(CardView(title:"параметр1", count: "10", time:"40", color: .red))
Чтобы создать карточку, вам придется инициализировать объект типа [DailyScrums], это будет массив данных, который нам надо будет правильно инициализировать.
Это мы сможем сделать следующим кодом внутри Main.swift:
scrums = [DailyScrum(title: "Design", attendees: ["Cathy", "Daisy", "Simon", "Jonathan"], lengthInMinutes: 10, color: .red),
DailyScrum(title: "App Dev", attendees: ["Katie", "Gray", "Euna", "Luis", "Darla"], lengthInMinutes: 5, color: .green),
DailyScrum(title: "Web Dev", attendees: ["Chella", "Chris", "Christina", "Eden", "Karla", "Lindsey", "Aga", "Chad", "Jenn", "Sarah"], lengthInMinutes: 1, color: .blue)]
Данные из этого объекта, мы будем использовать следующим образом:
!()[https://docs-assets.developer.apple.com/published/7353d6cbe19dbf54a4ba6d83d7df4d5e/600/SUI_020-020-intro~dark@2x.png]
Задание: замените self.title self.count self.length на соответствующие параметры из DailyScrums
В конце вашей работы должно получиться следующее:
struct CardView: View {
let scrum: DailyScrum
var body: some View {
VStack(alignment: .leading){
Text(scrum.title).font(.headline)
Spacer()
HStack{
Label("\(scrum.attendees.count)",systemImage:"person.3").font(.subheadline)
Spacer()
Label("\(scrum.lengthInMinutes)", systemImage:"timer").font(.subheadline)
}
}.frame(height: 100).padding().background(scrum.color)
}
}
Как это все запихнуть в список, спросите у учителя, удачи!