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)
}
}
Как это все запихнуть в список, спросите у учителя, удачи!