web-dev-qa-db-fra.com

Création de modificateurs personnalisés pour Swift UI views

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.

5
Luis

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.")
    }
}
0