web-dev-qa-db-fra.com

Impossible d'utiliser une vue personnalisée dans SwiftUI

Pour mon application SwiftUI, j'ai créé une simple vue Title, qui a une taille de police et une couleur de texte définies. Title est déclaré comme suit:

struct Title: View {
    var string: String

    var body: some View {
        Text(string)
            .font(.system(size: 32))
            .color(Color.black)
    }
}

J'ai les objets texte suivants dans le corps de ma vue de contenu en ce moment:

var body: some View {
    VStack(alignment: .leading) {
        Text("Welcome")
            .font(.largeTitle)
            .color(Color.black)
        Text("to SwiftUI")
            .font(.largeTitle)
            .color(Color.secondary)
    }
}

Alors maintenant, je veux remplacer ces deux Texts par mes Titles:

var body: some View {
    VStack(alignment: .leading) {
        Title("Welcome")
        Title("to SwiftUI")
    }
}

Après avoir remplacé les vues, je reçois des messages d'erreur apparemment sans rapport avec Xcode, qui empêchent l'application de compiler:

Le membre statique 'leader' ne peut pas être utilisé sur une instance de type 'HorizontalAlignment'

'(LocalizedStringKey) -> Text' n'est pas convertible en '(LocalizedStringKey, String ?, Bundle ?, StaticString?) -> Text'

"Police" n'est pas convertible en "Police?"

...et plus. Revenir à Text au lieu de Title "résout" les problèmes.

Ce qui est intéressant, c'est que j'ai également une vue PrimaryButton personnalisée que j'ai pu ajouter sans aucun problème:

struct PrimaryButton: View {
    var title: String

    var body: some View {
        Button(action: { print("tapped") }) {
            Text(title)
                .font(Font.primaryButton)
                .offset(y: 1)
                .padding(.horizontal, 20)
                .padding(.vertical, 14)
        }
    }
}

... puis en l'utilisant:

PrimaryButton(title: "Let's go")

Question

S'agit-il simplement d'un problème bêta ou manque-t-il quelque chose?

11
LinusGeffarth

Aujourd'hui, 01oct2019, Swift m'a incité à remplacer string: Par. verbatim:.

Text(verbatim: "Pressure") fonctionne aujourd'hui Text(string: "Pressure") a fonctionné hier mais pas aujourd'hui. hth

0
AB Murphy