Partage
  • Partager sur Facebook
  • Partager sur Twitter

MOOC Approfondissez Swift avec la POO

    18 août 2019 à 17:56:09

    Bonjour à tous,

    Je suis actuellement sur cette partie du cours : https://openclassrooms.com/fr/courses/4446991-approfondissez-swift-avec-la-programmation-orientee-objet/4497155-concevez-vos-premiers-objets

    J'ai donc ouvert le même projet et cliquer sur le bouton pour avoir le code à gauche et le graphisme à droite, sauf que j'obtiens ceci :

    Et j'ai beau cherché, je ne trouve pas comment l'afficher comme dans le cours.
    Je n'ai que "Live View" et pas "Timeline", sinon j'ai Manuel mais c'est tout... 

    Je suis sur Xcode 10, j'ai essayé sur Xcode 9, même problème.

    Quelqu'un pourrait m'aider ?

    EDIT : C'est bon, après exécution ça s'affiche bien !
    Désolé je débute :s 

    EDIT2 : J'aurai dû aller plus loin dans la vidéo, Ambroise parle justement de la Live View...

    -
    Edité par wlamour 18 août 2019 à 22:44:18

    • Partager sur Facebook
    • Partager sur Twitter
      20 août 2019 à 21:47:56

      Je vous remonte une petite coquille (toute petite :p) du chapitre 3, partie 1.

      class SchoolBus {
      var schoolName = ""
      }

      La propriété schoolName sera disponible dans la classe SchoolBus, mais pas pour les instances de Bus.

      C'est "class SchoolBus: Bus" au lieu de "class SchoolBus", ce qui était bien indiqué juste avant.

      -
      Edité par wlamour 20 août 2019 à 21:50:37

      • Partager sur Facebook
      • Partager sur Twitter
        11 octobre 2019 à 17:00:59

        Hello, 

        J'ai besoin d'une petite explication dans la partie surcharger les méthodes au niveau de l'exercice dans la console de code.

        Je voulais savoir pourquoi cette partie de code que j'ai voulu utiliser, ne fonctionne pas : 

          override func sePresenter() -> String {
            super.sePresenter()
            return " et je suis développeur !"
          }

        Sachant que je me suis basé de l'exemple du cours qui lui avait un print à la place d'un return.

        • Partager sur Facebook
        • Partager sur Twitter
          11 octobre 2019 à 23:06:43

          Hi !

          Même question que LoupBina...

          Et en plus, depuis que Xcode s'est màj, je n'arrive plus à accéder aux live views. Et j'ai perdu mes repères avec l'assistant (il n'y a plus les mêmes boutons)... Il me dit "The playground couldn't continue running because the playground source didn't compile successfully".

          Si une âme charitable passe dans le coin....

          Merci :)

          • Partager sur Facebook
          • Partager sur Twitter
            12 octobre 2019 à 23:59:49

            Bonjour,

            Pour LoupBinal, ça veut dire quoi “ça ne fonctionne pas” ? Ça ne compile pas ? Dans ce cas quel est le message d’erreur ? Le résultat attendu n’est pas celui obtenu ? Dans ce cas quel est le résultat attendu et celui obtenu ? (Même si je me doute bien du résultat obtenu dans le cas présent. C’est un réflexe à avoir. Ça ne marche pas, ça ne veut rien dire. Ou en tout cas rien d’utile)

            Pour kaguya :

            • meme remarque que pour LoupBinal si tu dis que tu as le même problème.
            • pour la perte de repère je suis désolé mais... peux pas faire grand chose.
            • la perte du live views (Je l’ai jamais utilisé je sais même pas ce que c’est) ce n’est pas à cause du code qui ne compile pas ? Si ça ne compile pas, il ne t’indique pas la ligne qui ne compile pas avec un message ?
            • Partager sur Facebook
            • Partager sur Twitter
              14 octobre 2019 à 0:14:19

              Bonjour et merci pour ce cours qui m'aide beaucoup,

              J'ai un petit souci avec "self.Nom", à la compilation j'ai une erreur:

              Si vous voyez la solution, un grand merci d'avance.

              • Partager sur Facebook
              • Partager sur Twitter
                14 octobre 2019 à 8:48:20

                A mon avis tu n’as déclaré aucune classe. Ta fonction est globale. Du coup self n’existe pas. Supprime le.

                • Partager sur Facebook
                • Partager sur Twitter
                  14 octobre 2019 à 10:30:42

                  Geda a écrit:

                  Bonjour,

                  Pour LoupBinal, ça veut dire quoi “ça ne fonctionne pas” ? Ça ne compile pas ? Dans ce cas quel est le message d’erreur ? Le résultat attendu n’est pas celui obtenu ? Dans ce cas quel est le résultat attendu et celui obtenu ? (Même si je me doute bien du résultat obtenu dans le cas présent. C’est un réflexe à avoir. Ça ne marche pas, ça ne veut rien dire. Ou en tout cas rien d’utile)

                  Pour kaguya :

                  • meme remarque que pour LoupBinal si tu dis que tu as le même problème.
                  • pour la perte de repère je suis désolé mais... peux pas faire grand chose.
                  • la perte du live views (Je l’ai jamais utilisé je sais même pas ce que c’est) ce n’est pas à cause du code qui ne compile pas ? Si ça ne compile pas, il ne t’indique pas la ligne qui ne compile pas avec un message ?


                  En faite, quand je prend le code en initialisant une variable avant(dans la fonction) pour "super.sePresenter()" et que je l'affiche dans le return, l'exercice se valide mais de ma façon cité plus haut il se valide pas.

                  Kaguya123 a écrit:

                  Hi !

                  Même question que LoupBina...

                  Et en plus, depuis que Xcode s'est màj, je n'arrive plus à accéder aux live views. Et j'ai perdu mes repères avec l'assistant (il n'y a plus les mêmes boutons)... Il me dit "The playground couldn't continue running because the playground source didn't compile successfully".

                  Si une âme charitable passe dans le coin....

                  Merci :)

                  Vérifie qu'il est bien cocher dans le bouton au niveau de l'assistant puis pour qu'il s'affiche lance ton programme en cliquant sur la petite lecture à gauche du code.

                  En espérant que ça réponde à ta question.

                  -
                  Edité par LoupBina1 14 octobre 2019 à 10:47:32

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 octobre 2019 à 11:51:15

                    Je connais pas les conditions par coeur les conditions de validation de l'exercice mais je pense piger ton problème

                    override func sePresenter(): String {
                      super.sePresenter()
                      return " et je suis développeur !"
                    }
                    

                    Ta méthode sePresenter retourne un String. J'imagine que derrière pour l'utiliser tu feras print(sePresenter()) et dans la console ça t'affichera " et je suis développeur !"

                    En effet, ton super.sePresenter() est appelé mais tu ne fais strictement rien du résultat. (Xcode devrait même te générer un warning dans ce cas). Du coup tu ne pourras pas afficher le "Je m'appelle Xavier" (ou que sais-je).

                    J'imagine que ce que tu souhaites réellement faire c'est :

                    override func sePresenter(): String {
                      return "\(super.sePresenter()) et je suis développeur !"
                    }
                    

                    -
                    Edité par Geda 14 octobre 2019 à 11:51:53

                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 octobre 2019 à 12:11:37

                      Ah d'accord je comprend mieux, je n'ai pas fait le test sur Xcode, je suis resté sur la console en ligne.

                      Merci.

                      J'ai aussi un petit problème, j'ai vraiment du mal à bien comprendre la 2nd partie du cours même en regardant plusieurs fois les vidéos et le texte écrit.

                      Il y a t'il un moyen de régler ce problème ? Enfin des sites qui font des petits exercices pour s'exercer sur la POO par exemple ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 octobre 2019 à 14:20:08

                        Pour Geda, oui, j'ai déclaré une classe:

                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 octobre 2019 à 14:23:58

                          Il te faut pas un init() pour self ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 octobre 2019 à 14:33:17

                            @LoupBina1 : Je pourrais t'expliquer à peu près n'importe quoi (je pense) mais il va falloir être un peu plus explicite sur ce que tu ne comprends pas. Avec si possible des exemples. Je ne connais pas le cours, je ne l'ai pas fait. Donc quand tu me parles de la "seconde partie" j'ai aucune idée de ce dont tu parles :)

                            @FlorenceIsaac : Ta fonction est en dehors du scope de la classe. Ainsi elle n'a pas accès à ses variables membres. Comme je le disais, il s'agit d'une fonction globale, self n'existe pas.

                            class Personne {
                              var nom: String
                            
                              func seMarie() {
                                  print(nom) // pas besoin de mettre self puisqu'il n'y a pas d'ambiguïté.
                              }
                            }
                            

                            Ce que tu as fait :

                            class Personne { var nom : String }
                            func seMarie() {}
                            

                            seMarie n'est pas une fonction de la classe Personne elle ne peut donc pas accéder à nom

                            Si j'extrapole on pourrait faire ça :

                            class Personne { var nom: String }
                            func seMarie(_ personne: Personne) {
                               print(personne.nom s'est marié) 
                            }
                            
                            seMarie(Personne(nom: "Hubert)) 
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                              14 octobre 2019 à 14:37:02

                              Non, je n'ai pas vu cela dans le cours
                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 octobre 2019 à 12:05:18

                                Bonjour, quelqu'un aurait le code final que je le compare avec le mien ?

                                Car le bus est sensé avancer mais le miens n'avance pas :/

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 octobre 2019 à 16:21:43

                                  LoupBina1 a écrit:

                                  Bonjour, quelqu'un aurait le code final que je le compare avec le mien ?

                                  Car le bus est sensé avancer mais le miens n'avance pas :/


                                  Personne :( ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 octobre 2019 à 19:01:22

                                    Qu’est ce qui te fait penser qu’il devrait avancer ? (dans ton code je veux dire)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      21 octobre 2019 à 15:31:38

                                      class Bus {
                                          var driverName: String
                                          var seats = 20
                                          var occupiedSeats = 0 {
                                              willSet {
                                                  print("Il y a du mouvement dans le bus...")
                                              }
                                              didSet {
                                                  if oldValue < occupiedSeats {
                                                      print("\(occupiedSeats - oldValue) personnes viennent de monter !")
                                                  } else {
                                                      print("\(oldValue - occupiedSeats) personnes viennent de descendre !")
                                                  }
                                              }
                                          }
                                          var numberOfWheel = 4
                                          var description: String {
                                                  return "Je suis un bus conduit par \(driverName) avec \(occupiedSeats) personnes dedans."
                                          }
                                          
                                          init(driverName: String){
                                              self.driverName = driverName
                                          }
                                          
                                          func moveForward(){
                                              canvas.moveBusForward()
                                          }
                                          
                                          func stop(){
                                              canvas.stopBus()
                                          }
                                          
                                          func drive(road: Road){
                                              for _ in road.sections{
                                                  moveForward()
                                              }
                                          }
                                      }
                                      
                                      class SchoolBus: Bus {
                                          var schoolName = ""
                                          
                                          override func drive(road: Road) {
                                              for section in road.sections {
                                                  switch section.type {
                                                  case .plain:
                                                      moveForward()
                                                  case .home:
                                                      if shouldPickChildren() {
                                                          pickChildren(from: section)
                                                          stop()
                                                      }
                                                      moveForward()
                                                  case .school:
                                                      dropChildren()
                                                      stop()
                                                  }
                                              }
                                          }
                                          
                                          private func shouldPickChildren() -> Bool {
                                              return occupiedSeats < seats
                                          }
                                      
                                          private func pickChildren(from roadSection: RoadSection) {
                                              if let section = roadSection as? HomeRoadSection {
                                                  occupiedSeats += section.children
                                              }
                                          }
                                      
                                          private func dropChildren() {
                                              occupiedSeats = 0
                                          }
                                      }
                                      
                                      enum RoadSectionType {
                                          case plain
                                          case home
                                          case school
                                      }
                                      
                                      class RoadSection {
                                          
                                          var type: RoadSectionType
                                          
                                          init(type: RoadSectionType) {
                                              self.type = type
                                              switch type {
                                              case .plain:
                                                  canvas.createRoadSection()
                                                  canvas.moveBusForward()
                                              case .home:
                                                  canvas.createHomeRoadSection()
                                              case .school:
                                                  canvas.createSchoolRoadSection()
                                              }
                                          }
                                          convenience init() {
                                              self.init(type: .plain)
                                          }
                                      }
                                      
                                      class HomeRoadSection: RoadSection {
                                          var children: Int
                                          
                                          init(children: Int) {
                                              self.children = children
                                              super.init(type: .home)
                                          }
                                          
                                          convenience init(){
                                              self.init(children: 2)
                                          }
                                      }
                                      
                                      class SchoolRoadSection: RoadSection {
                                          init() {
                                              super.init(type: .school)
                                          }
                                      }
                                      
                                      class Road {
                                          var sections = [RoadSection]()
                                          static let maxLength = 77
                                          
                                          static func createStraightRoad() -> Road {
                                              return Road(length: 30)
                                          }
                                          
                                          static func createRoadToSchool() -> Road {
                                              let road = Road(length: 0)
                                              for i in 0..<30 {
                                                  if i%7 == 1 {
                                                      road.sections.append(HomeRoadSection(children: 2))
                                                  } else {
                                                      road.sections.append(RoadSection(type: .plain))
                                                  }
                                              }
                                              road.sections.append(SchoolRoadSection())
                                              return road
                                          }
                                          
                                          init(length: Int) {
                                              var length = length
                                              if length > Road.maxLength {
                                                  length = Road.maxLength
                                              }
                                              for _ in 0..<length {
                                                  self.sections.append(RoadSection(type: .plain))
                                              }
                                          }
                                      }
                                      
                                      Road.createStraightRoad()
                                      RoadSection(type: .plain)
                                      RoadSection(type: .home)
                                      RoadSection(type: .school)
                                      Je sais pas si le code final était ça, j'ai fait en sorte de faire juste avancer le bus mais j'ai pas d'autre maison de créé, pour tant la fonction du cours est présente.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        22 octobre 2019 à 11:02:37

                                        Je ne sais pas trop ce qu'est canvas mais ça ne me semble pas trop étonnant.

                                        Ligne 154 : ça retourne un truc mais tu ne l'utilises pas. Donc ça sert à rien. Ligne 156 : ça semble dessiner une home sur le canvas Ligne 155 et 157 : ça dessine autre chose qu'une home.

                                        Donc de ce que je comprend t'as 1 maison, 1 school, et 1 route sans rien.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          28 octobre 2019 à 10:13:32

                                          Oui le canvas c'est une erreur dans le projet de base, normalement c'est canva.

                                          Tout le reste j'ai suivi le cours mais je pensais qu'à la fin on avait le même rendu qu'à l'introduction du cours.

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          MOOC Approfondissez Swift avec la POO

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          • Editeur
                                          • Markdown