Partage
  • Partager sur Facebook
  • Partager sur Twitter

MOOC Swift iOS

    2 décembre 2016 à 18:52:47

    Ah merci beaucoup,

    Je suppose que c'est assez galère a mettre en place et que ça risque de pas marcher des masses mais j'essaye de trouver une alternative a l'achat d'un mac pour développer des applis pour IOS. Si il existe d'autres moyens je suis preneur. =)

    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2016 à 14:29:11

      Je pense que la virtual machine mac OS n'est pas si dur à mettre en place. Ce qui est chiant c'est de faire un "hackintosh". Les retours d'expériences que j'ai eu venaient de gens qui avaient installé mac OS en dual boot sur leur machine Windows. Certains ont galéré, d'autres n'ont jamais réussi. Ceux qui ont réussi n'ont pas gardé longtemps le dual boot parce que ça ramait pas mal. Il faut savoir que c'était pour "essayer". Donc aucune utilisation de Xcode et des différents outils qu'il propose comme le simulateur. Si tu rajoutes cette donnée je pense que l'expérience est encore plus désagréable. Concernant la machine virtuelle à mon avis ça rajoute un cran dans l'horreur puisque les ressources sont partagés. Après pour ce dernier cas je n'ai eu aucun retour d'expérience donc c'est pure spéculation de ma part.

      Tu peux toujours essayer, ça ne coûte rien. Et tu te rendras compte par toi même si cette solution est viable ou non.

      La seule alternative (je dis la seule, mais au final y'en a plein), si on prend comme objectif le développement d'application mobile, c'est de faire du cross plateforme avec Xamarin par exemple, qui te permet de faire du natif en c# ou des trucs comme Cordova qui te permettent de faire du "pas-natif" avec les technologies Web. Par contre exit le Swift / Objective-C et ça c'est triste (le Swift, pas l'Objective-C)

      Si ça ne tenait qu'à moi je te conseillerai l'achat d'un mac, mais je ne connais pas ton profil ni tes moyens donc ce serait déplacé de ma part. (Je l'ai quand même fait de manière plus ou moins subtile ;)  )

      -
      Edité par Geda 3 décembre 2016 à 14:30:30

      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2016 à 21:29:03 - Message modéré pour le motif suivant : Message complètement hors sujet


          3 décembre 2016 à 22:12:16

          Salut,

          Désolé mais ce que tu dis n'a aucun sens. Je sais pas, relis toi peut-être non ? Il manque des lettres, ta phrase fait 4 lignes, y'a des mots en trop, la grammaire est bancal et... OH MY GOD ! Un service en ligne à base de papier disponible à distance ?! QU'EST CE QUE C'EST QUE ÇA ?! Qu'est ce qui est disponible à distance ? Le papier ? Le service ? C'est évident s'il est en ligne. Ce serait donc le papier. Mais c'est quoi un service en ligne à base de papier ? Un fax ?

          Bref... En supposant que quelqu'un comprenne ce que tu racontes, deux nouvelles questions me viennent alors :

          - Quel est le rapport avec ce topic ? 

          - Quelles sortes d'idées attends-tu ? 

          -
          Edité par Geda 3 décembre 2016 à 22:15:32

          • Partager sur Facebook
          • Partager sur Twitter
            10 décembre 2016 à 17:58:01

            Ok merci Geda, ta réponse est super complète😊
            • Partager sur Facebook
            • Partager sur Twitter
              23 décembre 2016 à 18:17:00

              Bonjour,

              Merci pour le cours, est-ce qu'il est à jour (Xcode 8 - Swift 3) ?

              EDIT :  il me semble que non. Avez-vous une idée sur le temps d'attente avant la MAJ ?

              -
              Edité par Souhail_5 27 décembre 2016 à 16:09:05

              • Partager sur Facebook
              • Partager sur Twitter
                24 décembre 2016 à 15:25:32

                Bonjour à tous,

                Je suis dans le 4.4 du cours "Tirez parti des frameworks, bibliothèques et add-ons". Je viens d'installer le package Manager avec succès mais quand je relance Xcode 8.2.1 le Package Manager n'apparait toujours pas dans l'onglet Window. Est ce quelqu'un a eu ce problème avec cette version de xcode et a la solution?

                Merci à vous

                • Partager sur Facebook
                • Partager sur Twitter
                La chute n'est pas un échec, l'échec c'est de rester là où on est tombé!
                  2 janvier 2017 à 10:45:19

                  Bonjour à tous je suis entrain de réaliser le TP du cours d'initiation à Swift, seulement je suis confronter à un problème que je n'est pas réussi à résoudre ... 

                  Je souhaiterais dire au compilateur que si variable classe_2 n'est pas égale à "Guerrier" ou "Mage" ou "Archer" de faire une action.

                  J'utilise donc ce signe || mais Xcode reconnais "Guerrier" ou "Mage" comme un Bool et non comme un String ... 

                  Je vous met l'extrait de mon code pour que vous puissiez m'aider merci ... 

                  func choix_classe() -> String{
                      var classe_2: String
                      var i:Bool = true
                      repeat {classe_2 = input()
                      if classe_2 != "Mage"||"Guerrier"||"Archer"{
                          print("Cette classe n'esxiste pas veuillez retaper votre choix :"); i = false
                          }
                      } while !i
                      return classe_2
                  }
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 janvier 2017 à 11:32:50

                    -

                    -
                    Edité par Philippe2463 2 janvier 2017 à 12:52:08

                    • Partager sur Facebook
                    • Partager sur Twitter
                    La chute n'est pas un échec, l'échec c'est de rester là où on est tombé!
                      2 janvier 2017 à 11:58:00

                      Bonjour, le problème est tout simple :

                      "Mage" // String
                      "Mage" || "Guerrier" // Bool

                      Tu es en train de comparer un String à un Bool, donc j'imagine que ton code ne compile pas avec une petite pastille rouge. Il faut que tu compares un String à un String. Et ce, autant de fois que nécessaire. Donc :

                      if class_2 != "Mage" || classe_2 != "Guerrier" // and so on...
                      
                      //Tu peux aussi utiliser un switch
                      switch class_2 {
                        case "Mage", "Guerrier", "Archer": 
                          //Some stuff
                        default:
                          break
                      }


                      EDIT : De toute façon ton "if" est mal pensé. Il retournera toujours true. En supposant que class_2 contienne "Machin", il va tester "class_2 != "Mage" ". ça va retourner true et rentrer dans ta boucle. Donc ça c'est ce que tu veux. Par contre si class_2 contient "Mage", il va tester class_2 != "Mage", ça va retourner false, puis "class_2 != "Guerrier", ça va retourner true et comme c'est un OU logique ça va rentrer dans ton if.

                      Du coup je te conseille plutôt d'utiliser le switch qui est plus beau et qui fera ce que tu veux. Je te conseille aussi de virer tes Strings et d'utiliser une Enum à la place. C'est plus beau et plus safe, tu te protèges des erreurs bêtes de typo en écrivant ta String qu'à un seul endroit du code.

                      -
                      Edité par Geda 2 janvier 2017 à 12:05:19

                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 janvier 2017 à 12:12:26

                        Geda

                        Merci beaucoup pour ta réponse ! 

                        Je vais utiliser le switch ducoup c'est mieux tu as raison ! Cependant pour les enum j'ai encore un peu de mal mais j'y travail je vais regarder tout ça merci beaucoup !

                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 janvier 2017 à 18:32:09

                          Bonne et heureuse année 2017 à toute la communauté !

                          Mon prénom est André. Je suis développeur d'application android. j'ai un  gros problème.  j'ai généré mon application avec adobe flash professionnel cc 2015. J'ai essayé de l'héberger sous google playstore mais l’application a été refusée car selon eux, la version d'open ssl du lecteur adobe air incluse dans l'application est obsolète

                          alors quelle version d'adobe flash devrais je utiliser pour générér mon application ou simplement que devrais je faire?

                          Merci
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 janvier 2017 à 22:11:26

                            Salut,  bonne année à toi aussi. Malheureusement tu es complètement hors sujet. 

                            Sinon, je pense que tu devrais abandonner Adobe flash. Même Adobe le recommande (L'abandon). 

                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 janvier 2017 à 19:15:04

                              Salut à tous, petite question chapitre "On n'a toujours pas écrit de swift" :

                              Sachant que la fonction texteModifie envoie une alert dès que j'entre un chiffre dans le textField, je n'arrive pas à voir le textFieldShouldReturn en action..

                              La question est simple : comment dire a textModifie de se calmer et d'attendre le signal de textFieldShouldReturn pour afficher l'alerte ? Avec un if ? Autre ?

                              Bonus : Aidez-moi à m'auto-traiter de nullard :)

                              @IBActionfunc texteModifie (sender : UITextField) {      
                                      ifmodeAuto {
                                          iflet resultat = sender.text, resultat != "" {
                                              ifInt(resultat) == 8 {
                                                  alert("Bravo", message: "4 + 4 = 8\nC'est une bonne réponse !")
                                              } else {
                                                  alert("Faux", message: "Tu es vraiment nul, réessaye !")
                                              }
                                          }
                                      }
                                  }
                                  func textFieldShouldReturn(_ textField: UITextField) -> Bool {      
                                      ifmodeAuto {
                                          iflet resultat = textField.text, resultat != "" {
                                              ifInt(resultat) == 8 {
                                                  alert("Super !", message: "4 + 4 = 8\nC'est une bonne réponse!")
                                              } else {
                                                  alert("Nullard !", message: "Ce n'est pas la bonne réponse")
                                              }
                                          }
                                      }
                                      returntrue 
                                }



                              Merci

                              -
                              Edité par CoachKT 4 janvier 2017 à 19:17:53

                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 janvier 2017 à 19:40:49

                                Salut,

                                Question toute bête : es-tu certain  qu'il faut mettre une alert dans le "texteModifie" (je n'ai pas fait ce chapitre). En l'état, tu as ton code dupliqué à deux endroits. Je ne vois pas l'intérêt de texteModifie (mis à part spammer l'utilisateur d'alert. Ce qui rend l'application très agréable à utiliser)

                                Ceci dit, même avec ce comportement ignoble, tu devrais pouvoir voir ton textfieldShouldReturn. Celui-ci se déclenche lorsque tu fais... return. Et return ne déclenche pas texteModifie. Ajoute un print dans textFieldShouldReturn pour t'en convaincre. Si celui-ci ne s'affiche pas c'est bien que tu n'appelles jamais cette fonction.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  5 janvier 2017 à 15:19:04

                                  Merci Geda oui je me suis enflammé à glisser des alertes partout ^^ J'ai bien l'alerte quand je return (print ok aussi forcément).


                                  Une autre question concernant les contraintes sur les View :
                                  Est-il conseillé ou nécessaire de contraindre sa hauteur, sa largeur, sa position sur l'axe des X et sa position sur l'axe des Y pour que cela s'affiche correctement ? (et ceci pour chaque view)

                                  merci encore :)

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 janvier 2017 à 15:27:34

                                    Pour que ton application aie la même tête sur tous les téléphones, c'est nécessaire d'ajouter des contraintes aux views. Cependant, ce n'est pas la seule solution. Tu peux également le faire "programmatically" en définissant les frames (origine, taille) de chaque view dans la fonction didLayoutSubviews.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      11 janvier 2017 à 15:30:13

                                      Hello tout le monde.

                                      Allez je me lance dans mes questions.

                                      La première : je comprends pas du tout l'activité 1 à ce niveau là

                                      Vous allez replacer le stepper à sa position initiale. Vous allez donc :

                                      • récupérer ses coordonnées au moment où le glisser-déposer commence
                                      • et le replacer au moment où il termine.

                                      Pour ça, je veux que vous animiez le stepper pour le replacer. Pour réaliser une animation, on utilise la méthode de classe animateWithDuration de la classe UIView. Vous pouvez choisir l'animation qui vous convient tant que le stepper est bien repositionné.


                                      1 - Pourquoi replacer le stepper à 0 ?
                                      2 - Le slider aussi alors ??
                                      3 - Pourquoi récupérer ses coordonnées ?
                                      4 - Ou le replacer ??

                                      Deuxième point : Je travaille sur HackBook, et tout tourne à merveille.

                                      J'ai fait d'un HP EliteBook 8470P un MacBook Pro :) et xCode tourne sans problème.

                                      Merci

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        11 janvier 2017 à 16:12:20

                                        Salut,

                                        J'espère que tu auras une réponse ;) Quant à moi je n'ai pas fait le cours, je ne vois pas de quoi tu parles. Désolé.

                                        Concernant le hackintosh : C'est bon à savoir.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          11 janvier 2017 à 20:30:37

                                          Sache que si tu bien bien les tuto mais A LA LETTRE sans faille, tu peux builder un hackintosh sans problème.
                                          Il faut surtout que tes éléments hardware soient compatibles, et la liste est également dispo.

                                          Je ne donne bien sur aucun lien ...

                                          ++

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            12 janvier 2017 à 2:11:30

                                            Salut olivierplatinium, 

                                            Moi non plus je n'ai pas compris la logique de l'exercice, pourquoi déplacer un stepper ? Mais c'est simplement pour apprendre les animations faut pas chercher plus loin.

                                            En gros ce que j'ai compris :
                                            Tu cliques sur le stepper (pour le déplacer) et t'en profite pour enregistrer sa position au moment du clic (récupérer ses coordonnées au moment où le glisser-déposer commence).
                                            Ensuite tu le bouges (avec UIPanGestureRecognizer), selon si tu l'as déplacé à gauche ou à droite sur l'axe des x (par rapport a sa position initiale) tu incrémentes -1 ou +1.
                                            Une fois que tu relâches le clic (tu auras donc déplacé le stepper) tu utilises animateWithDuration pour qu'il revienne à sa place tout seul comme un grand (et le replacer au moment où il termine = en français et replacer le stepper à sa position initiale au moment où son déplacement est terminé je suppose).

                                            Je ne sais pas encore comment utiliser le began changed ended mais il y a des chances que cela corresponde aux 3 étapes que je viens de décrire.

                                            Je m'y mets bientôt bonne chance à toi !
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              12 janvier 2017 à 9:04:32

                                              Bonjour coachKT,

                                              C'est tout à fait ça!

                                              Bonne continuation 

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              La chute n'est pas un échec, l'échec c'est de rester là où on est tombé!
                                                12 janvier 2017 à 15:30:40

                                                Yes merci de ton explication !!
                                                J'ai compris désormais comment utiliser les états également.

                                                Profite de la console pour printer ce qui t'intéresse c'est une bonne idée ;)

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  12 janvier 2017 à 18:42:06

                                                  Je veux bien un coup de main pour insérer l'animation.. Je n'arrive pas à déplacer le stepper vers le CGPoint initialMoveLocation.

                                                  switch sender.state {
                                                          case .began:
                                                              
                                                              let step = sender.view!
                                                              let initialMoveLocation = sender.location(in: self.view!)
                                                              step.center = initialMoveLocation
                                                              print("La position initial du stepper est \(initialMoveLocation)")
                                                              
                                                          case .changed:
                                                              print ("Le Stepper se déplace")
                                                   
                                                          case .ended:
                                                              endedMoveLocation = sender.location(in: self.view!)
                                                              print("La position finale du stepper est \(endedMoveLocation)")
                                                              
                                                             Quel animation glisser ici ???
                                                  
                                                              print("Le stepper est de retour à sa position initiale")
                                                          default: break
                                                          }




                                                  Question bonus :
                                                  J'ai déclarer deux variables initialMoveLocation et endedMoveLocation plus tôt.
                                                  Dans la fonction lorsque je les reprends avec var ou let cela print un (x,y), par contre si je les reprends sans var ni let comme dans le case .ended ci dessus cela print un optional(x,y).
                                                  A quoi cette différence est-elle dûe ?

                                                  Merci par avance :) 

                                                  -
                                                  Edité par CoachKT 12 janvier 2017 à 18:43:46

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    12 janvier 2017 à 19:34:02

                                                    Pour la première question : 

                                                    Si j'ai bien compris le but de l'exercice, à savoir remettre le stepper à sa position d'origine, ton endedMoveLocation ne sert à rien. Il faut faire un truc style : 

                                                    UIView.animate(withDuration: 0.5) {
                                                      sender.location = initialMoveLocation
                                                    }

                                                    Alors, j'ai écrit ce truc de mémoire, ça ne marche pas. Déjà initialMoveLovation a l'air de n'être défini nul part dans ton scope. Et je ne sais pas comment fonctionne "location". A toi de le faire fonctionner.

                                                    Pour la question bonus : 

                                                    En supposant que .location te retourne un String

                                                    Dans le cas de .began tu créés une variable initialMoveLocation. Vu que .location retourne un String, cette variable est de type String.

                                                    Dans le cas de .ended, tu utilises une variable déjà déclaré qui est de type String? (j'ai décidé de manière arbitraire que .location retournait un String). 

                                                    Donc dans le premier cas tu n'as pas d'optionnel et dans le second cas tu en as un. Si tu utilises initialMoveLocation dans le .ended, tu auras nil. Puisque la variable initialMoveLocation créée dans .began n'existe plus. Et c'est elle que tu as utilisé et non pas, comme tu le penses certainement, celle que tu as pu définir ailleurs (au même endroit que endedMoveLocation j'imagine) ¿ Claró ?

                                                    EDIT : Va savoir pourquoi, lorsque je met en gras, parfois ça garde la couleur, parfois ça l'override en orange. M'enfin...

                                                    -
                                                    Edité par Geda 12 janvier 2017 à 19:36:21

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      12 janvier 2017 à 22:24:44

                                                      Merci Geda en effet la variable crée en began donne nil si je l'a reprend dans le ended, du coup je ne sais pas comment faire pour réutiliser la location du began dans le ended.. Si quelqu'un a une soluce je suis preneur j'ai sillonné le web sans élément de réponses.

                                                      Edit : Les soluces sur le web c'est de passer par le viewDidAppear 

                                                      -
                                                      Edité par CoachKT 12 janvier 2017 à 22:40:56

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        12 janvier 2017 à 23:21:05

                                                        Et bien je suppose que ton code ressemble à quelque chose comme ça, non ?

                                                        class A {
                                                          var initialMoveLocation : String? //C'est encore le même type arbitraire !
                                                          
                                                        
                                                          func x(sender: AnyObject) {
                                                            switch sender.state {
                                                               default: break //la flemme de recopier
                                                               case .began
                                                                 let initialMoveLocation = "X" //Vu que c'est un String, je fais ce que je veux.
                                                            }   
                                                          }

                                                        Dans ce cas,

                                                        Il faut bien que tu comprennes que ton var initialMoveLocation défini comme "variable membre" n'est pas le même que ton let initialMoveLocation. A partir du moment où tu définis une variable dans un "inner scope" elle sera utilisé dans ce scope et dans les suivants (je crois, à vérifier, mais normalement ce serait ça). A moins que tu explicites clairement que tu fais référence à la variable membre avec le mot clé self

                                                        Un exemple :

                                                        class A {
                                                          var machin = 0
                                                          
                                                          func x() {
                                                            var machin = 1
                                                            machin += 1
                                                            
                                                            print(machin) // 2
                                                            print(self.machin) // 0
                                                            
                                                            self.machin = 3
                                                            
                                                            print(machin) // 2
                                                            print(self.machin) // 3
                                                            
                                                            y()
                                                          }
                                                          
                                                          func y() {
                                                            print(machin) // 3
                                                            print(self.machin) // 3
                                                          }
                                                        }

                                                        J'espère qu'avec cet exemple, c'est clair. Conclusion : ne déclare pas de let, utilise ta variable membre. Et si tu n'en as pas, créés en une.

                                                        PS : Les soluces sur le web raconte vraiment n'importe quoi (ou bien tu n'as pas compris ce que tu cherchais et ce que tu as trouvé :D)


                                                        -
                                                        Edité par Geda 12 janvier 2017 à 23:21:24

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          13 janvier 2017 à 3:16:22

                                                          YATAAAA !!!! :D:D:D:D
                                                          Mille merci je pense que tu m'as fait comprendre une notion essentielle avec ton exemple.

                                                          Big up à toi Geda grand professeur, au début je me suis dit mais qu'est-ce qu'il espère que je fasse avec ça ??? A-t-il compris ma question ? Alors qu'en fait tu m'en as donné juste assez, pil poil ce qu'il faut pour que je saisisse et applique à l'exo magnifique. (C'est toujours pas parfait mais ça bouge !)

                                                          -
                                                          Edité par CoachKT 13 janvier 2017 à 4:46:47

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            16 janvier 2017 à 19:09:01

                                                            Philippe2463 a écrit:

                                                            Bonjour à tous,

                                                            Je suis dans le 4.4 du cours "Tirez parti des frameworks, bibliothèques et add-ons". Je viens d'installer le package Manager avec succès mais quand je relance Xcode 8.2.1 le Package Manager n'apparait toujours pas dans l'onglet Window. Est ce quelqu'un a eu ce problème avec cette version de xcode et a la solution?

                                                            Merci à vous

                                                            J'ai exactement le meme problème je pense que c'est du au changement de version mais j'ai beau chercher je trouve pas de solution. Peut être faut-il attendre la prochaine Màj :(

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              16 janvier 2017 à 19:23:51

                                                              D'après les résultats de mes recherches ce serait Apple qui empêcherait ce genre d'installation sur ses logiciels pour plus de sécurité. Ça reste à vérifier! 

                                                              A+

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              La chute n'est pas un échec, l'échec c'est de rester là où on est tombé!

                                                              MOOC Swift iOS

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown