Préférence

Bonjour,

Je travaille sur un des livres de Paul Hudson.
Dans un des "projets", Paul montre comment ajouter une vue "Preferences".
Je cite le paragraphe:

"To get started, create a new SwiftUI view called SettingsView. Before we add any code to it, I want you to go to CowsAndBullsApp.swift so we can tell SwiftUI that this is our app’s preferences view rather than just a regular view.
Add this to the body property of the app struct: "

Settings(content: SettingsView.init)

"To be clear, your code should look like this:"

@main
struct CowsAndBullsApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }

        Settings(content: SettingsView.init)
    }
}

Je précise qu'il y a bien un "import SwiftUI" en début de code.

Le problème est que ce code génère une erreur de compilation:
Cannot find 'SettingsView' in scope

Je ne comprends pas pourquoi.

Mots clés:

Réponses

  • Si tu as déjà créé la vue SettingsView le soucis va être plutôt long à régler.
    Si tu n'as pas créé la vue SettingsView c'est parce que tu n'as pas créé la vue SettingsView 😉

  • Je n'ai pas compris. :(

    J'ai également tenté de suivre l'exemple d'Apple:
    https://developer.apple.com/documentation/swiftui/settings
    mais j'obtiens la même erreur

  • Est-ce que tu as créé la vue SettingsView ? Si non crée la.
  • Il faut que tu déclares la vue SettingsView dans le SettingsView.swift.
    Le livre dit de ne pas ajouter de code « dans la classe », pas « dans le fichier ». Il faut tout de même la déclarer/définir, mais les « ajustements » (ajouts de properties, méthodes, toute la custo de la view en bref) se feront plus tard.

  • Comment faire en SwiftUI pur, sans passer par le StoryBoard, pour déclarer la vue SettingsView ?

  • Bon, j'ai ajouté ce code dans SettingsView.swift.

    struct SettingsView: View {
        var body: some View {
            VStack {
                //
            }
        }
    }
    

    Je ne comprends pas encore pourquoi il est nécessaire d'ajouter une var body mais je progresse. Merci!

  • LarmeLarme Membre
    juillet 2022 modifié #8

    C'est un protocol, et c'est une variable obligatoire. Cf la doc de View.

  • C'est parce que SettingsView est déclarée comme implémentant le protocole View. Ce protocole impose de déclarer une propriété body qui retourne un sujet de type implémentant lui même le protocol View.

    T'as pas besoin d'avoir compris tout ce que je viens d'écrire, ça va être expliqué dans la suite du bouquin d'une manière ou d'une autre. Pour le moment c'est pas important de comprendre pourquoi tu dois juste savoir qu'il faut le faire 😉

Connectez-vous ou Inscrivez-vous pour répondre.