Préférence

RocouRocou Membre

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

  • PyrohPyroh Membre

    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 😉

  • RocouRocou Membre

    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

  • PyrohPyroh Membre
    Est-ce que tu as créé la vue SettingsView ? Si non crée la.
  • LarmeLarme Membre

    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.

  • RocouRocou Membre

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

  • RocouRocou Membre

    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
    8 juil. modifié #8

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

  • PyrohPyroh Membre

    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.