Partage
  • Partager sur Facebook
  • Partager sur Twitter

Apprentissage du language Swift

    30 janvier 2019 à 10:43:38

    Bonjour a tous,

    on vient tous juste de me confier la maintenance d'une application mobile sous Swift.

    J'avoue etre vraiment nouveau dans le domaine (les seul applications que j'ai faites juste qu'a present utilisent Ionic Framework). D'apres vous est ce que cela est "jouable" selon vous ?

    Ou est ce qu'il est necessaire d'avoir plusieurs mois d'experience dans le domaine ?

    J'ai suivi les cours propose sur le site d'openclassrooms et je vous avoue qu'ils ne me sont pas d'une grande aide (ils n'expliquent pas comment creer une application mobile. Ils ne font qu'expliquer comment fonctionne le language swift). Je viens donc de m'acheter des cours sur Udemy en esperant qu'ils m'aideront.

    (Si vous avez des conseils + sources pouvant m'aider n'hesitez surtout pas je suis preneur

    Je pense que tout le monde est deja passe par la (apprentissage du language Swift + mise en pratique). Dans mon cas comme je n'ai aucun "Senpai" (je ne connais pas l'equivalent du mot en francais desole),je dois apprendre par moi meme. :)

    Merci

    -
    Edité par Scion 31 janvier 2019 à 4:44:57

    • Partager sur Facebook
    • Partager sur Twitter
      31 janvier 2019 à 10:54:02

      Salut, Y'a pas vraiment de questions dans ton sujet. J'ai envie de dire que tout est possible. Surtout que l'app existe déjà, de manière itérative tu peux toujours comprendre comment fonctionne les choses.

      En source tu as deux bloggers que je trouve bien : John Sundell et Paul Hudson. Y'a plein d'articles intéressants sur leur site, pour tout niveau.

      Si tu as une problèmatique tu peux toujours venir la poster ici. Je suis assez actif.

      • Partager sur Facebook
      • Partager sur Twitter
        13 février 2019 à 6:19:21

        @Geda

        J'aurai quelques petites questions.

        1) Est ce que tu fais egalement des applications hybride ? Ou fais tu simplement du full natif ?

        En effet, comme tu le sais je me suis mis recemment sur du full natif et j'ai l'impression que le developpement d'application natif "classique" requiere plus de temps que faire une application hybride.

        2) Si tu fais egalement de l'hybrique j'aimerai avoir ton avis ?

        Moi je fais un peu d'hybride et je t'avoue que je trouve qu'on doit ecrire beaucoup plus de code pour au final faire la meme chose (je prend l'exemple du projet natif que l'on m'a refile).

        ====> Ou est specifique au projet sur lequel je boss lol

        • Partager sur Facebook
        • Partager sur Twitter
          13 février 2019 à 10:53:44

          Je fais du full natif. J'ai fait un peu d'hybride et j'ai eu le sentiment qu'on devait batailler pour faire des trucs qui auraient été simples en natif. 

          Si tu as l'impression de faire plus de code pour pas grand chose c'est peut-être que tu codes des trucs qui servent à rien.

          Si je reprend ton code : 

          if let description = questionDetail.description{
               
              var description = description
               
              if (isTranslated && questionDetail.description_translated != nil) {
                   
                  var _self = self
                  let currentLang = UserDefaults.standard.value(forKey: "lang") as! String
                  SwiftGoogleTranslate.shared.detect(description) { (detections, error) in
                      if let detections = detections {
                          for detection in detections {
                              SwiftGoogleTranslate.shared.translate(description, currentLang, detection.language) { (text, error) in
                                   
                                  description = text as! String
                                   
                                  let attributes = [ NSAttributedString.Key.font: UIFont.init(name: "HiraginoSans-W3", size: 12)! ]
                                  var attrString = NSMutableAttributedString(string: description, attributes : attributes)
                                  attrString = Utils.checkMention(attributedString: attrString)
                                  let style = NSMutableParagraphStyle()
                                  style.lineSpacing = 2 // change line spacing between paragraph like 36 or 48
                                  style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
                                  let nsText = attrString.string as NSString
                                  let textRange = nsText.range(of: attrString.string)
                                  attrString.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: textRange)
                                  _self.textView.attributedText = attrString
                                  _self.textView.isEditable = false
                                  _self.textView.dataDetectorTypes = .all
                                  _self.textView.isSelectable = true
                                  _self.textView.isScrollEnabled = false
                                   
                              }
                          }
                      }
                  }
           
              }
               
              let attributes = [ NSAttributedString.Key.font: UIFont.init(name: "HiraginoSans-W3", size: 12)! ]
              var attrString = NSMutableAttributedString(string: description, attributes : attributes)
              attrString = Utils.checkMention(attributedString: attrString)
              let style = NSMutableParagraphStyle()
              style.lineSpacing = 2 // change line spacing between paragraph like 36 or 48
              style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
              let nsText = attrString.string as NSString
              let textRange = nsText.range(of: attrString.string)
              attrString.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: textRange)
              textView.attributedText = attrString
              textView.isEditable = false
              textView.dataDetectorTypes = .all
              textView.isSelectable = true
              textView.isScrollEnabled = false
          }

          Y'a une tonne de trucs qui servent à rien. Tu pourrais remplacer ta textview par un label et faire ça : 

          if let description = questionDetail.description{
              if isTranslated && questionDetail.description_translated != nil {
                  let currentLang = UserDefaults.standard.string(forKey: "lang") ?? ""
                  SwiftGoogleTranslate.shared.detect(description) { (detections, error) in
                      for detection in detections ?? [] {
                          SwiftGoogleTranslate.shared.translate(description, currentLang, detection.language) { (text, error) in
                              
                              
                              // Ici faudrait voir ce que ça fait visuellement. Je ne sais pas ce qu'est checkMention donc je laisse
                              // Mais on surement virer et juste faire
                              // self.label.text = text
                              let attributes = [ NSAttributedString.Key.font: UIFont.init(name: "HiraginoSans-W3", size: 12)! ]
                              var attrString = NSMutableAttributedString(string: text, attributes : attributes)
                              attrString = Utils.checkMention(attributedString: attrString)
                              let style = NSMutableParagraphStyle()
                              style.lineSpacing = 2 // change line spacing between paragraph like 36 or 48
                              style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
                              let nsText = attrString.string as NSString
                              let textRange = nsText.range(of: attrString.string)
                              attrString.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: textRange)
                              self.label.attributedText = attrString
                          }
                      }
                  }
                  
                  
              }
              
              // On dégage tout ce code, je vois pas à quoi il sert. Au pire y'a un truc à refactoriser
          }
          


          Si je reprend le sujet "Exécuter 1 méthodes depuis 1 UITableViewCell" je vois que tu set le delegate/datasource de la tableView à nil. Pourtant toutes les méthodes de ces deux protocoles sont implémentés. Tu pourrais tout supprimer.

          Le projet utilise RX pourtant c'est exploité qu'à certains endroits, ça donne un truc très bizarre. Globalement, il y a un gros problème d'architecture. Avoir un fichier de 2000 lignes c'est pas normal. A partir de 500 faut commencer à se poser des questions.

          • Partager sur Facebook
          • Partager sur Twitter
            14 février 2019 à 0:52:08

            @Geda

            merci pour ces precisions :)

            Je me pose la question car on m'a demande de mettre a jour un formulaire (rajouter des champs, en deplacer, etc...) et je pensai que ca me prendrai une journee pour faire tout ca mais visiblement non.

            ==> Je sais que je suis debutant et que cela joue egalement, j'ai donc demande a ceux qui avait cree ce code combien de temps ils prendraient (en vitesse normal sans se presse) et ils m'ont dit 3 a 4 jours.

            C'est pour cela que je te pose la question car via une application hybride, comme on utilise une webview modifier un formulaire ne prend a peine quelque heure...

            En effet, je dois rajouter de bouton radio, des checkbox, des menu deroulant .... et je m'appercois qu'il n'y a pas de composants :euh:

            Il faut donc devoir les creer, la ou en hybride il suffirait d'utiliser:

            <input type="radio" name="choix" value="0" checked="checked" /> Oui <input type="radio" name="choix" value="1" /> Non
            
            <input type="checkbox" name="rgpd" value="1" /> Acceptes tu que tes donnees soit revendu et/ou mis en libre circulation sur Internet?
            
            <select name="pays">
            <option value="JP">Japon</option>
            <option value="FR">France</option>
            </select>

            D'ou mes questions ^^

            J'attend d'avoir beaucoup plus d'experience avec swift pour pouvoir vraiment me faire une idee

            • Partager sur Facebook
            • Partager sur Twitter
              14 février 2019 à 9:43:17

              Pour les checkbox / radio button c’est vrai que ça n’existe pas. Mais c’est assez simple à faire. En fait, même si ça existait en tout prêt ça prendrait sûrement le même temps

              Pour un oui / non cest un peu dommage de faire un système de radio button. Il y a les switch pour ça  

              Pour la liste déroulante c’est un peu plus touchy. Ça dépend de ce qui est exigé. Si on part sur le comportement natif (les choix qui apparaissent en bas de l’ecran) c’est simple. Si on part sur un Truc façon web ça sera plus compliqué. Mais en même temps ce sera degueulasse niveau UX Donc je doute que ce soit ca la demande.  

              En supposant que ce soit la liste native qui est demandé 3/4 jours ça me parait abusé. 1 journée déjà c’est que je traine. Après j’ai sûrement pas toutes les informations (on doit prendre en compte le traitement des données ? Quel est le traitement à faire ? Il y a combien de nouveau champs ? Niveau design c’est chiant ou non ?) ce genre de détails... 

              • Partager sur Facebook
              • Partager sur Twitter

              Apprentissage du language 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