Partage
  • Partager sur Facebook
  • Partager sur Twitter

MOOC Apprenez les fondamentaux de Swift.

    28 juillet 2017 à 11:47:34

    Bonjour à tous,

    Le cours Apprenez les fondamentaux de Swift est disponible !

    Ce cours fait suite au précédent sur le développement iOS : Introduction à iOS, plongez dans le développement mobile

    Pour faire de riches applications iOS, il faut maîtriser le langage Swift. Et quelle chance, Swift est un très bon langage pour débuter en programmation ! Mais ne vous y méprenez pas, sa richesse, son élégance et sa performance séduiront aussi ceux qui se sont déjà frottés à d'autres langages. Dans ce cours, vous verrez donc les fondamentaux du langage pour démarrer sereinement votre vie de développeur iOS !

    Sur ce forum, je répondrais le plus régulièrement possible à vos questions. N'hésitez pas, il n'existe pas de questions bêtes. Si vous vous les posez, vous n'êtes vraisemblablement pas les seuls !

    Bon cours et bon courage ;) !

    A bientôt !

    -
    Edité par AmbroiseCollon 28 juillet 2017 à 11:58:11

    • Partager sur Facebook
    • Partager sur Twitter
      12 août 2017 à 12:40:02

      Bonjour,

      Je suis passez peut être un peu vite dessus, mais j'aimerais comprendre pourquoi, si readLine renvoie un Optional, on arrive à le mettre (stocker) dans une constante de type String. Est ce correct de dire qu'il y a une conversion ? Une constante a t elle un type ?

      if let name = readLine(){
          print("Coucou \(name)")
      
          }



      Merci pour tous vos efforts pour rendre le cours à portée de tous.

      Ridhouane

      -
      Edité par Ridhouane 12 août 2017 à 13:21:29

      • Partager sur Facebook
      • Partager sur Twitter
        13 août 2017 à 2:06:39

        Salut !

        Lors-ce que tu créer une variable à laquel tu initialise la valeur d'un optionnel, le tout dans ta condition if, cette valeur est immédiatement vérifié.

        Si une valeur existe, alors la condition est validé on sait que la constante n'est pas nil. Le language t'autorise donc (et t'oblige) à utiliser cette variable non comme un optionnel, mais comme une variable régulière.

        Dans le cas ou la valeur était nil, alors la condition n'etait pas validé nous n'entrerions pas dans le bloc de la condition et la constante n'éxisterait plus !

        C'est une syntaxe très pratique pour vérifier l'éxistence de nos valeurs en swift !

        • Partager sur Facebook
        • Partager sur Twitter
        Tutoriels sur GameplayKitSceneKit (iOS 3D game engine), ARKit (iOS réalité augmentée) en cours d'écriture
          13 août 2017 à 9:40:57

          Ah oui juste, le if fait beaucoup.

          Un grand merci.

          • Partager sur Facebook
          • Partager sur Twitter
            6 septembre 2017 à 11:16:36

            Bonjour,

            Une question de grande débutante : j'essaie d'écrire une fonction qui retourne le décompte des réponses à une question à choix multiples en prenant comme argument un tableau de type [Enum]. Pour un tableau de réponses contenant des valeurs de type Bool, je sais comment faire :

            func answerstoQuestion(question: String, results: [Bool]) -> String {
                reponseOui = 0
                reponseNon = 0
                for answer in results {
                    if answer == true {
                        reponseOui += 1
                    }
                    else {
                        reponseNon += 1
                    }
                }
                return "\(question) : \(reponseOui) oui, \(reponseNon) non."
            }

            Est-il possible d'écrire une fonction similaire qui récupérerait dans le corps de la fonction les valeurs possibles d'[Enum] (du genre "oui", "non", "sans opinion") avant de les passer en revue via l'instruction switch  ? 

            Grosso modo, voici le pseudo-code que j'imagine, mais aucune de mes tentatives ne fonctionne :

            func reponsetoQuestionAChoixMultiples(question: String, results: [Enum]) -> String {
            // récupérer toutes les valeurs possibles de [Enum] (>> c'est là que je coince !)
            // passer le tableau en revue avec switch
            // retourner une String avec le décompte des réponses
            }
            


            J'espère que je suis claire... Si ce n'est pas faisable, comment procéder ?

            Merci de votre aide !

            Célia



            -
            Edité par CeliaCha 6 septembre 2017 à 11:54:47

            • Partager sur Facebook
            • Partager sur Twitter
            Célia
              23 octobre 2017 à 21:27:59

              Bonjour,

              que signifie le message d'erreur "Thread 1: Signal SIGABRT" ? j'obtient ce message après avoir compilé a la fin de la leçon n°10.

              Cordialement,

              Gauthier

              • Partager sur Facebook
              • Partager sur Twitter
                25 octobre 2017 à 11:23:53

                Il faudrait que tu nous montre ton code et la ligne qui pose problème si tu peux. On ne peux pas t'aider sinon. ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  26 octobre 2017 à 2:01:10

                  Bonsoir,

                  je rencontre le même problème que Gauthier.

                  Lorsque je compile mon fichier viewcontroller.swift , j'ai cette page qui s'ouvre automatiquement avec un message d'erreur dans mon code.

                  Voilà mon code 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 octobre 2017 à 11:41:58

                    Bonjour,

                    Tu n'es pas sur le sujet du bon cours. Le sujet correspondant est ici.

                    Merci beaucoup pour les captures d'écrans mais pour pouvoir t'aider, je vais avoir besoin de l'intégralité du contenu de ta console. Merci beaucoup !

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 novembre 2017 à 18:28:39

                      Bonjour,

                      Merci pour le tutorial, je viens de m'initier à la programmation des apps pour iPad, IPhone, et ça m'est très utile. Je souhaitais par ailleurs savoir si c'est possible de développer les application (écrire le code en entier) sur un iPad et non sur un Mac. Vous pensez que c'est réalisable ?

                      Merci pour vos réponses ! 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 janvier 2018 à 11:07:23

                        Bonjour Ambroise et merci pour tes cours qui sont d'une extrême qualité.

                        Je suis entrain de commencer ton cours sur le MVC, car je cherche à construire une application de quiz sur le même principe que celle du cours, mais avec une source de questions locale dans un premier temps et ensuite en lien avec une datasource sur un serveur tel que iCloud.

                        Donc ma question: comment partir avec une source locale (un modèle de questions locales) et non un téléchargement depuis le site que tu nous proposes ?

                        Encore merci pour ton cours et impatient de découvrir les suivants !

                        -
                        Edité par DidierA 14 janvier 2018 à 11:10:13

                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 janvier 2018 à 16:06:48

                          Bonjour Didier,

                          Tu peux toujours mettre toutes tes questions dans un grand tableau Swift :D ! C'est la solution la moins élégante mais la plus simple dans un premier temps. Ensuite, si tu souhaites utiliser iCloud, le mieux c'est que tu mettes tes questions en local dans Core Data (cours à venir sur le sujet) car iCloud peut facilement s'appuyer dessus ou alors tu peux utiliser un fichier Json que tu stockes dans ton app.

                          Si le but final, c'est le serveur, la solution la plus élégante et assez accessible me paraît l'utilisation du service firebase de Google. Il y a un cours Android sur le sujet qui sort dans quelques semaines et plus tard, ils sera porté sur iOS. Mais tu as d'autres très bonnes ressources en ligne sur le sujet.

                          Je te laisse explorer ces différentes pistes ! Bon courage !

                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 janvier 2018 à 0:51:16

                            Bonjour,

                            Concernant les optionnels, je comprends que ça sort 'optional' dans les dictionnaires (au cas où les dictionnaires vides, ou les clés n'existent pas), mais pourquoi ça sort pas 'optionnal' dans les tableaux? car il existe également des tableaux vides

                            Dans ce tableau suivant:

                            var a = ["iOS", "Android"]

                            print(a[0]) => ça sort "iOS"

                            tant dis que

                            print(a.first) => ça sort optional iOS

                            Pourriez-vous m'expliquer la différence entre a.first et a[0]?

                            Je vous en remercie

                            Huong

                            • Partager sur Facebook
                            • Partager sur Twitter
                              19 janvier 2018 à 11:44:31

                              Bonjour,

                              Fondamentalement c'est la même chose, effectivement. Voici ce que je pense de l'implémentation de "first"

                              extension Array {
                                var first: Element? {
                                  if self.count > 0 { return self[0] }
                                  return nil 
                                }
                              }

                              On voit qu'au final ça ne fait qu'accéder au tableau de manière totalement classique avec une petite vérification.

                              La question qui se pose après c'est, effectivement, pourquoi c'est pas pareil ?

                              Réponse d'Apple : 

                              As to rationale, It’s easy and very common to have static knowledge that the index is in range.... In this case it’s much better to establish a precondition that the index is valid so that common use-cases don’t have to cope syntactically with a failure that can’t happen. Contrast this with dictionary indexing on keys, where it’s commonly not known whether the key is already in the dictionary.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 février 2018 à 9:05:03

                                Bonjour tout le monde et merci Ambroise pour tes cours que j'apprécie particulièrement.

                                J'ai commencé le cours mais je suis bloqué au début car je ne peux pas insérer les outlets et les actions.

                                La classe View Controller n'existant pas si je comprend bien.

                                Si quelqu'un veut bien éclairer ma lanterne, je lui en serai reconnaissant.

                                D'avance merci

                                 Capture d'écran de Xcode

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 février 2018 à 10:18:25

                                  Salut,

                                  Je vois trois possibilités : 

                                  - L'outlet que t'essaie de drag n'est pas dans un controller qui a la classe "ViewController"

                                  - Ton Storyboard n'est pas dans le même module que ton ViewController

                                  - Xcode bug

                                  Du coup, pour chacun de ces cas, voici les solutions : 

                                  - Vérifie que dans "l'identity inspector" tu aies la bonne classe (fais un screenshot si tu peux).

                                  - Supprime le mot clé internal (c'est pas la solution idéal, ton storyboard et ton viewcontroller devrait être dans le même module. Mais c'est un moyen simple de voir is c'est ça le problème)

                                  - Essaie de faire le chemin à l'envers : 

                                  @IBOutlet weak var quoteLabel: UILabel!

                                  Puis fais ton trait depuis le petit rond qui apparait à gauche de cette ligne jusqu'au label

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 février 2018 à 14:35:14

                                    Merci Geda pour ton aide.

                                    J'avoue que je me suis un peu perdu dans le sous-marin.

                                    Pour ma part, j'ai supprimer le projet Teki et recommencer un nouveau projet du même nom, et là ça fonctionne !

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      5 juillet 2018 à 10:33:50

                                      Bonjour, 

                                      Je suis actuellement le cours sur le langage swift mais je n'en suis qu'au tout début lorsqu'il faut utiliser le playground, malheureusement je rencontre un problème avec ce dernier car lorsque j'essaye d'effectuer une opération, le playground me donne pas la réponse mais marque " running playground " en réfléchissant.

                                      J'espère que quelqu'un sait remédier à ce problème,

                                      Maximilien

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        5 juillet 2018 à 13:27:03

                                        Malheureusement il n’y a rien d’autres à faire que de le laisser charger. Essaie de desactiver le run automatique
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          5 juillet 2018 à 23:41:34

                                          J’y pense mais peut être que ça fonctionne bien et que tu as une couille dans l code
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            6 juillet 2018 à 12:27:06

                                            Ouais peut être ou alors c'est un problème d'affichage ou un bug de xcode
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              23 juillet 2018 à 13:23:22

                                              Je confirme les dires de Maximilien Gridel : le playground de XCode 9.4.1 est inutilisable en l'état sur mon Mac (MacBook Pro 8Go de Ram + macOS 10.13.5), car au bout de quelques minutes d'utilisation le run mouline et aucun résultat ne s'affiche plus dans la barre de droite, ou alors plusieurs dizaines de minutes après avoir fini de taper, même quand le playground ne contient que l’addition de deux entiers à un chiffre et rien d’autre.

                                              Cependant, la solution suggérée par Geda de désactiver le run automatique fonctionne bien. Pour cela, j'ai cliqué-long sur le triangle du run en bas et j'ai sélectionné "Manually run".

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                2 octobre 2018 à 10:28:03

                                                Bonjour, je suis tout nouveau, j'essaie de faire le cours de Swift en "sous marin", mais je n'arrive pas à voir les résultats, par exemple quand je fais 2+3, je ne vois pas le 5. J'ai refait la manip proposée sur ce forum (mette en Manually run), mais sans résultat.

                                                Merci de votre aide.

                                                -
                                                Edité par Thiecko 3 octobre 2018 à 9:47:07

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  2 octobre 2018 à 23:39:49

                                                  Salut,

                                                  Si tu as sélectionné manually run, il faut fzire run. Regarde le bouton juste à gauche (fléche Vers le haut). Sur les nouvelles versions de xcode C’est à gauche des lignes de codes En mettant le pointeur sur les lignes

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    3 octobre 2018 à 9:52:00

                                                    Merci beaucoup Geda, ça marche
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      24 janvier 2019 à 15:21:55 - Message modéré pour le motif suivant : Toute forme de publicité est interdite


                                                        1 février 2019 à 15:42:21

                                                        Bonjour je voudrais un petit coup de main.

                                                        J'aimerais que quand l'utilisateur rentre 1 ou 2 ou 3, l'interface lui donne le nom du personnage qu'il a entré.

                                                        Merci d'avance.

                                                        func chooseAttacker() {
                                                                var myAttacker: Character
                                                                repeat {
                                                                    print("Now choose your attacker by taping 1 or 2 or 3")
                                                                    var userChoice: Int = 0
                                                                    repeat {
                                                                        if let data = readLine() {
                                                                            if let dataToInt = Int(data) {
                                                                                userChoice = dataToInt
                                                                            }
                                                                        }
                                                                    } while userChoice != 1 || userChoice != 2 || userChoice != 3
                                                                    
                                                                    switch userChoice {
                                                                    case 1:
                                                                        myAttacker = self.characters[0]
                                                                        characters.append(myAttacker)
                                                                    case 2:
                                                                        myAttacker = self.characters[1]
                                                                        characters.append(myAttacker)
                                                                    case 3:
                                                                        myAttacker = self.characters[2]
                                                                         characters.append(myAttacker)
                                                                    default:
                                                                        print("Invalid, choose 1 or 2 or 3, ")
                                                                    }
                                                                } while characters.count == 1;
                                                        }
                                                        
                                                        }
                                                        
                                                         

                                                        -
                                                        Edité par Thiecko 1 février 2019 à 15:54:42

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          1 février 2019 à 17:22:17

                                                          Salut, quel est le problème avec ton code ?

                                                          func chooseAttacker() {
                                                              print("Now choose your attacker by taping 1 or 2 or 3")
                                                              var userChoice: Int = 0
                                                              var myAttacker: Character
                                                              
                                                              if let data = readLine() {
                                                                  if let dataToInt = Int(data) {
                                                                      userChoice = dataToInt
                                                                  }
                                                              }
                                                              
                                                              guard [1, 2, 3].contains(userChoice) else { chooseAttacker() }
                                                              myAttacker = self.characters[userChoice]
                                                              characters.append(myAttacker)
                                                          }
                                                          

                                                          Je l'ai réécrit pour que ce soit plus lisible (c'est certainement subjectif)

                                                          -
                                                          Edité par Geda 1 février 2019 à 17:23:04

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            4 février 2019 à 8:51:04

                                                            Bonjour Geda, j'ai cette erreur sur mon playground, peux tu me dire comment y remédier?

                                                            Merci

                                                            -
                                                            Edité par Thiecko 6 février 2019 à 12:27:44

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            MOOC Apprenez les fondamentaux de Swift.

                                                            × 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