Aller au contenu


Photo

[Udemy - Swift 3] On en parle ?


  • Please log in to reply
76 réponses à ce sujet

#21 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 601 messages
  • LocationParis

Posté 29 mai 2017 - 10:45

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        fonction1(nom: "Barak Obama", age: 55)
        fonction2("Donald Trump", 70)
        
    }

    // MARK: Fonction classique avec des paramétres nommés
    func fonction1(nom:String, age:Int) {
    }
    
    // MARK: Raz-le-bol de la dictature des paramétres nommés
    func fonction2(_ nom:String, _ age:Int) {
    }

}


a

Pour afficher les MARK: il faut cliquer en haut de la fenêtre, comme montré dans l'image ci-jointe. C'est un truc que j'ai appris récemment avec le MOOC de F. Kordon.

Fichier(s) joint(s)

  • Fichier joint  clic1.png   320,87 Ko   2 téléchargement(s)
  • Fichier joint  clic2.png   135,44 Ko   1 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#22 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 601 messages
  • LocationParis

Posté 29 mai 2017 - 11:00

3°) - L'utilisation de "in" comme dans "fetchTodos("") { (array, arrayData) in " ?

 

fetchTodos("") { (array, arrayData) l'explication du ("") ?

Euh c'est où ça ? Dans quelle leçon de Sandy ? Que je puisse comprendre le contexte d'utilisation.


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#23 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 887 messages
  • LocationPlestin-les-Grèves (22)

Posté 29 mai 2017 - 11:05

1. Le _ est là pour les occasions -

 

  a) quand on ne veut pas utiliser la valeur comme dans ce code de Draken :

  var chrono:Double = 0.0
  
  for _ in 0...400
  {
    chrono += 0.1
    
    print (chrono)
  }

Ici il voulait faire une boucle 401 fois mais il n'utilise pas les nombres de 0 à 400 dans la boucle.

 

b ) quand on ne veut pas devoir saisir le nom d'un paramètre dans l'appel à une méthode comme :

  func addNestedInteractor(_ interactor: Interactor)
  {
    …
  }

Les deux "noms" avant le ":" sont le nom externe, suivi par le nom interne.

 

Ici il faut avoir un nom de paramètre interne mais, parce que le nom de la méthode contient déjà "Interactor", on veut éviter de le répéter :

{
  myInteractor.addNestedInteractor(autreInteractor)
}

à la place de :

{
  myInteractor.addNestedInteractor(interactor: autreInteractor)
}

2. // MARK: signifie que la ligne apparaîtra dans le menu en haut de la fenêtre de code, entre les mentions de noms des classes, fonctions, etc ; c'est pour diviser le code et pour marquer les sections.

 

Fichier joint  mark.png   184,23 Ko   1 téléchargement(s)

 

Et le tiret donne une ligne au-dessus le MARK

 

3. le "in" est utilisé pour déclarer les noms des paramètres dans un closure (méthode anonyme) :

  public func activate()
  {
    nestedInteractors.forEach
    {
      interactor in
      
      interactor.activate()
    }
    
    isActive = true
  }

Dans ce cas, il n'y a qu'un paramètre mais, comme dans ton exemple, on pourrait avoir plusieurs. Les parenthèses ne sont pas obligatoires.



#24 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 887 messages
  • LocationPlestin-les-Grèves (22)

Posté 29 mai 2017 - 11:09

@Draken - évidemment, j'étais en train de rédiger ma réponse au même temps que toi  8--)



#25 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 601 messages
  • LocationParis

Posté 29 mai 2017 - 11:12

>:( Tu m'as empêché de poster un bel exemple de boucle avec un _.

 

Allez tant pis, je le poste quand même, mais sans explications :

for _ in 1...3 {
    print ("Trump,  ou  ?")
}


EDIT:  Et zut, le forum n'affiche pas les emojis ! Tant pis pour la tête de clown ..


  • Joanna Carter aime ceci

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#26 Gercofis

Gercofis

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 261 messages
  • LocationCrozon l'été et Chambéry l'hivers

Posté 29 mai 2017 - 22:46

Pour la MARK j'ai fini par comprendre en fait il faut MARK: et MARK:- ajoute une ligne sur le PopUp. de mémoire en ObjC c'est PRAGMA MARK quelque chose comme ça ?

 

j'ajoute pour ma défense que Sandy l'oublie souvent...

 

Euh c'est où ça ? Dans quelle leçon de Sandy ? Que je puisse comprendre le contexte d'utilisation.

 

Des la leçon 73 Modifier Todo, dans le fichier TodoTableViewController, dans la fonction par exemple :

override func viewDidAppear(_ animated: Bool)
{
  fetchTodos("")
  {
    (array, arrayData) in

    todos = array as? [NSDictionary]

    tableView.reloadData()
  }
}
 
j'avoue ne pas avoir tout compris mais je regarde dans ce sens
 
Merci a tous les deux....

 

 

 


Modifié par Joanna Carter, 30 mai 2017 - 11:40 .
Ajout de balises code et reformattage de code

Le compilateur c'est aussi bête (?/!) qu'une femme: il/elle râle d'abord, on grogne après, en fin de compte il/elle a toujours raison, de toutes façons on est obligé de céder et ça devient si bien quant il/elle est d'accord.
MacBookPro 2.6 GHz i7 8Go - iPad 3 3G 32Go - iPhone 4 et SE 16Go - en principe tout ça est a jour...

En retraite programmeur a ses heures, pas toujours très assidu, et un peu voir beaucoup fâché avec l'anglais ( un séjour correspondant est envisagé, si vous avez des plans (automne ou printemps) Je dois reconnaitre que le jeu Duolingo m'a bien fait avancer dans cette démarche .

Merci.


#27 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 949 messages
  • LocationParis

Posté 29 mai 2017 - 22:58

Pour fetchTodos(), regarde la méthode, sa déclaration, donne-là nous. Je suppose que le premier paramètre est un String, et là, elle donne un String vide, d'où "". Pour le reste, je suppose qu'il s'agit d'une closure (appelé block en Objective-C).

 

Au pifomètre via conjecture fortement poussée, je dirai que cette méthode regarde le paramètre String donné, fait une recherche dessus (genre un NSPredicate sur le nom de l'entité, mais si vide, pas de predicat), mais le tout étant asynchrone, elle renvoie ses données via une closure.


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#28 Gercofis

Gercofis

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 261 messages
  • LocationCrozon l'été et Chambéry l'hivers

Posté 29 mai 2017 - 23:05

 func fetchTodos(_ predicate:String, completion:(_ array:NSArray,_ arrayData:NSArray)->()) {
        
        var arr = [NSDictionary]()
        var arrData = [NSManagedObject]()
        let requete:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName:"Todo")
        
        requete.predicate = NSPredicate(format: "todo = %@",predicate)
        
        do {
            let resultats = try context!.fetch(requete)
            for resultat in resultats {
                
                let todo = (resultat as AnyObject).value(forKey: "todo")
                let date = (resultat as AnyObject).value(forKey: "date")
                let fait = (resultat as AnyObject).value(forKey: "estFait")
                
                let todoDict = ["todo": todo, "date": date, "estFait": fait as! Bool] //as [String: Any]
                
                arr.append(todoDict as NSDictionary) // différence voir 8'35" session 69
                arrData.append(resultat as! NSManagedObject)
                
            }
            
            completion(arr as NSArray, arrData as NSArray)
            
        } catch {
            print("erreur requête")
        }
    }

Modifié par Joanna Carter, 30 mai 2017 - 11:41 .
Ajout de balises code, encore une fois

Le compilateur c'est aussi bête (?/!) qu'une femme: il/elle râle d'abord, on grogne après, en fin de compte il/elle a toujours raison, de toutes façons on est obligé de céder et ça devient si bien quant il/elle est d'accord.
MacBookPro 2.6 GHz i7 8Go - iPad 3 3G 32Go - iPhone 4 et SE 16Go - en principe tout ça est a jour...

En retraite programmeur a ses heures, pas toujours très assidu, et un peu voir beaucoup fâché avec l'anglais ( un séjour correspondant est envisagé, si vous avez des plans (automne ou printemps) Je dois reconnaitre que le jeu Duolingo m'a bien fait avancer dans cette démarche .

Merci.


#29 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 949 messages
  • LocationParis

Posté 29 mai 2017 - 23:10

Pour la MARK j'ai fini par comprendre en fait il faut MARK: et MARK:- ajoute une ligne sur le PopUp. de mémoire en ObjC c'est PRAGMA MARK quelque chose comme ça ?

 

j'ajoute pour ma défense que Sandy l'oublie souvent... 

 

J'utilise #pragma mark en Objective-C.

C'est plus pour faire joli qu'autre chose. Ordonner le code, etc. Bien qu'avoir de bonnes habitudes, c'est un truc à avoir, je pense que le principe de ce cours est d'expliquer les concepts de CoreData plutôt.

 

Il faut différencier le cours de base (qui t'explique pourquoi tu as "!", des "?", des "if let") d'un cours de concept. Je ne connais pas le Swift à vraiment parler, je connais les concepts, et quand je code en Swift pour tester, bidouiller, je passe volontairement les ! et ?, j'laisse XCode faire, car c'est "confiné", je sais qu'il y a valeur ou non. C'est un peu comme mettre nil dans une methode avec un NSError en paramètre, ce qui revient à faire un try! je crois en Swift, c'est à dire ne pas faire de catch et prier pour que tout fonctionne.

Sauf que cela parfois peut alourdir le code et cacher l'explication du concept.
Avec mon faible niveau en Swift et le fait de ne pas connaître le cours, je ne peux pas juger, et je ne dis pas que ce que l'auteur enseigne est bon ou mauvais, mais la première règle d'Internet, c'est de toujours douter, de remettre en question, et en matière de code, de tester, bidouiller, ne jamais prendre tel quel un code de StackOverflow ou assimilé sans avoir compris, c'est parfois mauvais.

 

 

Suite à ton post avec le code de fetchToDo(), c'est bien ce qu'il me semblait (à la question du predicate près).

Le "in" correspond à une closure. C'est un usage basique, qu'on peut retrouver dans (NS)URLSession, Alamofire, UIAlertActionController, etc.

 

Pour du Swift 3, je trouve cependant dommage d'utiliser des NSDictionary et NSArray et ne pas préférer les types Swift équivalents (alors que y'a un Dictionary Swift juste avant).


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#30 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 601 messages
  • LocationParis

Posté 29 mai 2017 - 23:26

Je vais regarder la leçon pour comprendre. Pour le moment je suis totalement d'accord avec Larme. 

 

Pour du Swift 3, je trouve cependant dommage d'utiliser des NSDictionary et NSArray et ne pas préférer les types Swift équivalents (alors que y'a un Dictionary Swift juste avant).

 

 

Je suis toujours étonné de la manière dont Sandy utilise les closures. Cela complique le code, pour un intérêt que je n'arrive pas à saisir.


  • Joanna Carter aime ceci

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#31 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 601 messages
  • LocationParis

Posté 30 mai 2017 - 08:25

 

Des la leçon 73 Modifier Todo, dans le fichier TodoTableViewController, dans la fonction par exemple :

 

override func viewDidAppear(_ animated: Bool) {

        fetchTodos("")  {(array, arrayData) in

            todos = array as? [NSDictionary]

            tableView.reloadData()

        }

    }

j'avoue ne pas avoir tout compris mais je regarde dans ce sens

 

 

 

 

Une closure est un bloc d'instructions qui ne sont pas destinés à être exécutés tout de suite, mais plus tard. C'est une sorte de processus multi-tâche, indépendant du reste de l'application. Cela permet de manipuler des séquences de code comme des variables.

 

On s'en sert notamment pour les animations, avec la méthode UIView.animate(). A titre d'exemple j'ai écrit une fonction affichant un message de bienvenu sur l'écran, avant de le faire disparaitre progressivement.

func messageBienvenu() {
        // Création Label
        let label = UILabel()
        label.textAlignment = .center
        label.center = self.view.center
        self.view.addSubview(label)
        label.textColor = UIColor.red
        label.font = UIFont.boldSystemFont(ofSize: 40)
        label.text = "BIENVENU"
        label.sizeToFit()
        
        // Disparition progressive (3 secondes)
        UIView.animate(withDuration: 3.0,
                       animations:  { label.alpha = 0 },
                        completion: { _ in label.removeFromSuperview() }
                      )
    }

La méthode UIView.animation(withDuration:) utilise deux blocs. L'un pour indiquer l'objectif de l'animation, et l'autre pour préciser ce qui doit se passer à la fin de l'animation. 

 

 

Le bloc d'animation est court, ne manipulant qu'une propriété d'un seul objet. Mais il pourrais être plus long.

animations:  { label.alpha = 0 }

Le bloc de completion contient le traitement à exécuter à la fin de l'animation.

completion: { _ in label.removeFromSuperview() }

C'est une action un peu violente, puisqu'il s'agit de la destruction du label créé pour afficher le message de bienvenu. Bye bye petit label tu as rempli ta mission, il est temps de libérer la mémoire ..

 

Ce bloc a besoin d'une variable en entrée, d'où la syntaxe un peu différente de la précédente. Enfin quand je dis qu'il a besoin d'une variable, j'exagère un peu. Disons qu'un développeur d'Apple s'est dis que, peut-être un jour, éventuellement, il pourrais arriver que la complétion soit appelé alors que l'animation n'est pas terminée. Et il a intégré une valeur binaire (booléenne) dans l'appel du bloc de complexion, pour signaler cette possibilité.

 

La syntaxe d'un bloc avec des variables est :

{ (nom des variables) in 
   instructions 
}

La completion de l'animation devrais s'écrire :

completion: { (indicateurBinaire) in
               label.removeFromSuperview() 
            }

Mais comme on se fiche généralement de savoir si l'animation s'est terminée correctement ou pas, on écrit :

completion: { _ in label.removeFromSuperview() }

D'ailleurs Xcode lui même propose cette syntaxe par défaut.

 

Sandy utilise un bloc avec deux variables, d'où son utilisation de cette syntaxe :

override func viewDidAppear(_ animated: Bool) {
        fetchTodos("")  {(array, arrayData) in
            todos = array as? [NSDictionary]
            tableView.reloadData()
        }
    }

Je vois comment elle fait, mais je ne comprend pas pourquoi elle le fait. Elle procédait déjà de même avec l'exemple dont nous avons parlé dans le topic sur l'introduction à CoreData. Tu as vu comment j'ai réécrit son code pour l'épurer, le simplifier et le rendre plus lisible, en n'utilisant que des éléments propres à Swift. Sandy si un jour, tu passes par notre bar, n'hésite pas à poster ici..


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#32 Gercofis

Gercofis

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 261 messages
  • LocationCrozon l'été et Chambéry l'hivers

Posté 30 mai 2017 - 09:02

J'espère ne pas trop vous ennuyer avec mes questions (un peu basiques semble-t-il ?

Souvent personne ne pose ce genre de question de peur de se faire bâcher, Merci encore a vous deux.

Je partage votre point vue sur le coté compliqué de Sandy, je ne suis pas encore assez compétent pour comprendre dans le code la différence entre du pur Swift et du Swift/ObjC. Je ne comprends pas forcément vos réponses en profondeur mais le principe quand même et ça m'aide beaucoup.

@Draken - Si tu trouves par hasard ce tuto sur CoreData réécrit en pur Swift je suis preneur bien entendu. Je trouve Sandy un peu compliquée avec tout ces aller et retour d'une classe a l'autre, sans parler des oublis. A demeurant je trouve qu'elle s'exprime très bien.

Je pense que ce tuto était fait précédemment en ObjC pour ça qu'il y a des restes ?


Le compilateur c'est aussi bête (?/!) qu'une femme: il/elle râle d'abord, on grogne après, en fin de compte il/elle a toujours raison, de toutes façons on est obligé de céder et ça devient si bien quant il/elle est d'accord.
MacBookPro 2.6 GHz i7 8Go - iPad 3 3G 32Go - iPhone 4 et SE 16Go - en principe tout ça est a jour...

En retraite programmeur a ses heures, pas toujours très assidu, et un peu voir beaucoup fâché avec l'anglais ( un séjour correspondant est envisagé, si vous avez des plans (automne ou printemps) Je dois reconnaitre que le jeu Duolingo m'a bien fait avancer dans cette démarche .

Merci.


#33 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 949 messages
  • LocationParis

Posté 30 mai 2017 - 09:19

Une closure est un bloc d'instructions qui ne sont pas destinés à être exécutés tout de suite, mais plus tard. C'est une sorte de processus multi-tâche, indépendant du reste de l'application. Cela permet de manipuler des séquences de code comme des variables.

Je vais juste revenir là-dessus. Les block ou closures (cela dépend de ton language) sont en effet très utiles en mode asynchrone, et sont un concept à assimiler puisqu'il est souvent utilisé.

Cependant, une petite nuance, un block/closure ne signifie pas forcément que c'est asynchrone. Par exemple, les nombreux blocks d'itérations de (NS)Array, NSAttributedString, etc, sont synchrone eux.


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#34 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 601 messages
  • LocationParis

Posté 30 mai 2017 - 09:22

Cependant, une petite nuance, un block/closure ne signifie pas forcément que c'est asynchrone. Par exemple, les nombreux blocks d'itérations de (NS)Array, NSAttributedString, etc, sont synchrone eux.

Qui peut le plus, peut le moins ..


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#35 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 601 messages
  • LocationParis

Posté 30 mai 2017 - 09:38

J'espère ne pas trop vous ennuyer avec mes questions (un peu basiques semble-t-il ?

 

Bah non, en plus je comprend mieux les choses après les avoir expliqués. Répondre à des questions m'aide à progresser.

 

 

Je partage votre point vue sur le coté compliqué de Sandy, je ne suis pas encore assez compétent pour comprendre dans le code la différence entre du pur Swift et du Swift/ObjC. Je ne comprends pas forcément vos réponses en profondeur mais le principe quand même et ça m'aide beaucoup.

 

Un code pur Swift est un code sans les objets NSQuelqueChose. Ce sont de vénérables ancêtres provenant d'un lointain passé (NS = Next Step, le système d'exploitation des ordinateurs que Jobs avait développé après s'être fait viré d'Apple). Au début le Swift fonctionnais avec les NSTruc, puis il a été réécrit avec de nouvelles classes similaires dans le principe, avec une syntaxe plus simple et des fonctionnalités améliorées.

 

Avoir des NSArrays et des NSDictionnary dans un code Swift c'est comme voir une locomotive à vapeur sur une ligne de TGV. Ça marche mais c'est plus compliqué, moins efficace et .. étrange.


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#36 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 949 messages
  • LocationParis

Posté 30 mai 2017 - 09:47

Un code pur Swift est un code sans les objets NSQuelqueChose. Ce sont de vénérables ancêtres provenant d'un lointain passé (NS = Next Step, le système d'exploitation des ordinateurs que Jobs avait développé après s'être fait viré d'Apple). Au début le Swift fonctionnais avec les NSTruc, puis il a été réécrit avec de nouvelles classes similaires dans le principe, avec une syntaxe plus simple et des fonctionnalités améliorées.

Prefix disparu qui est dommage je trouve. Pas le fait de perdre NS, mais de ne pas le remplacer, par SW par exemple.

Car au final, à expliquer, cela peut prêter à confusion, car on dit souvent "un NSString" pour dire "un objet de classe NSString", mais "data", c'est un mot très très commun, et cela peut tout mélanger dans la tête d'un débutant, si on parle de données, de la classe Data, ou d'une instance de Data. Et quand tu veux faire des recherches sur ton SE préféré, rechercher Data, String, tu seras plombé par des résultats liés à d'autres langages, alors qu'un NSString, c'est propre au monde d'Apple.


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#37 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 601 messages
  • LocationParis

Posté 30 mai 2017 - 09:55

quand tu veux faire des recherches sur ton SE préféré, rechercher Data, String, tu seras plombé par des résultats liés à d'autres langages, alors qu'un NSString, c'est propre au monde d'Apple.

Oui, c'est assez casse-pied de voir tous ces liens sur Windows et Android alors que tu cherches de l'info pour iOS. Même en ajoutant iOS ou Swift dans la recherche on tombe sur une foultitude de liens sans intéret.


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#38 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 887 messages
  • LocationPlestin-les-Grèves (22)

Posté 30 mai 2017 - 12:24

À propos les cours de Sandy, il ne faut que lire les mauvaises notes https://www.udemy.co...5-applications/(Avis des participants) pour trouver mon avis sur son code.

 

De mon avis, juste en lisant les petits bouts de code ici, c'est évident qu'elle n'a maîtrisé ni les principes de programmation Swift, ni les APIs UIKit.

 

Je vois que le cours est actuellement en offre à 95% de réduction mais, même a ce prix, il ne le vaut.



#39 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 887 messages
  • LocationPlestin-les-Grèves (22)

Posté 30 mai 2017 - 12:28

En plus, j'ai vu cette "exigence"

 

 

 

  • Un Mac laptop ou iMac (ou PC avec un système d'exploitation OSX)

 

Conseiller quelqu'un d'utiliser un Hackintosh ? Quoi ! Surtout qu'elle parle de soumettre les applis dans l'AppStore  ::)  :crazy:



#40 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 601 messages
  • LocationParis

Posté 30 mai 2017 - 13:14

À propos les cours de Sandy, il ne faut que lire les mauvaises notes https://www.udemy.co...5-applications/(Avis des participants) pour trouver mon avis sur son code.

 

Effectivement, il y a des commentaires meurtriers, notamment sur la partie CoreData. 

 

J'ai aussi repéré des choses curieuses dans d'autres tutos, comme par exemple le jeu de casino. Elle positionne ces contraintes pour le mode portrait, sans penser à ce qui se passe en orientation portrait. Cela ne serait pas gênant si elle bloquait le terminal en portrait, mais non justement. C'est un petit détail, mais choquant pour une démonstration destiné à des novices.

 

Je pense que Sandy est une bonne formatrice, mais qu'elle ne pratique pas couramment le développement iOS. Pour moi, le cours a probablement été écrit à la vas-vite, pour répondre à une demande éditoriale dans l'urgence.

 

EDIT : Je viens de regarder la première application développée par Sandy, dans son cours : un minuteur de cuisine. Elle n'y gère pas non plus les contraintes en mode paysage, et ne bloque pas ce mode dans l'application. Cela me conforte dans l'idée qu'elle a rédigée le cours sans une grande expérience pratique du développement iOS. 

 

 


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)