Je me demandais comment il était possible de créer des modificateurs pour les vues d'interface Swift UI?
Par exemple, disons que j'ai une vue définie comme suit:
struct LabelView: View {
let font1: Font = .header
let font2: Font = .body
var body: Some View {
// two views, where one uses font1 and other uses font2
}
}
Comment serait-il possible de créer un modificateur qui permette quelque chose comme:
LabelView()
.font1(.callout)
.font2(.body)
J'essaie d'apprendre à écrire des API dans la nature déclarative qui Apple pousse avec Swift UI mais il semble que la documentation ne soit pas complète à ce sujet) . J'ai essayé de créer une sorte de type ViewModifier
mais je ne sais pas vraiment ce que je dois faire avec ça, car il fallait que je retourne _ModifiedContent<_, _>
et je ne sais pas exactement comment procéder. Fondamentalement, est-il possible de modifier les propriétés d'une vue en utilisant une syntaxe déclarative comme celles des vues SwiftUI intégrées.
Voyez si c'est quelque chose que vous voulez. Vous pouvez simplement modifier les propriétés en fonction de vos besoins. Si vous voulez un textView fixe, alors gardez-le statique dans le labelView personnalisé.
import SwiftUI
struct LabelView: View {
var font1: Font = .headline
var font2: Font = .subheadline
var text1: String = ""
var text2: String = ""
var body: some View {
VStack {
Text(text1).lineLimit(nil).font(font1)
Text(text2).lineLimit(nil).font(font2)
}
}
}
struct StackOverFlow : View {
var body: some View {
//LabelView(font1: .title, font2: .subheadline )
LabelView(font1: .title, font2: .subheadline, text1: "What is Lorem Ipsum?", text2: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.")
}
}