Informations

Chaîne de coeurs chats


Chaîne de coeurs chats chiens souris lapins

J'ai regardé le code de l'application "String of Hearts", qui est disponible pour les appareils iOS. C'est pour trouver la plus longue séquence de cœurs dans une chaîne d'autres caractères.

L'application a quelques fonctionnalités de base : vous entrez une chaîne, puis appuyez sur le bouton du cœur, et elle vous montre la plus longue séquence de cœurs. C'est une idée simple, mais le code est assez désordonné et la plupart des décisions de conception sont prises très brièvement.

Vous pourriez vous attendre à ce que le problème soit que le code est trop détaillé. Je ne sais pas combien de personnes utilisent Swift sur iOS, mais cela pourrait être le problème. Même si ce n'est pas le problème, le code est répétitif et facile à comprendre en partie. Mais ce n'est pas. C'est compliqué parce que cette application essaie de faire beaucoup de choses différentes. Il a beaucoup de structures de données différentes et utilise de nombreuses API différentes.

Si vous voulez une idée simple, cette application a une idée simple. Mais je ne pense pas que ce soit un bon exemple de réutilisation de code.

L'application String of Hearts est une combinaison de trois classes : string , hearts et l'interface utilisateur. Les classes string et hearts stockent chacune beaucoup de données. La classe string est juste une collection ordonnée de caractères. Il utilise la classe NSCache pour économiser de la mémoire. La classe hearts stocke la séquence de cœurs et utilise la classe NSUserDefaults pour enregistrer les données. La classe UI stocke un peu de données, le texte d'une étiquette.

Il est difficile de faire un exemple de code générique qui illustre tout cela, alors parcourons un peu le code, pour montrer quelques décisions de conception et expliquer le code.

Tout d'abord, la classe string. Cette classe contient une seule chaîne : @IBAction func heart(sender: UIButton) { … } . C'est une méthode d'action, car vous l'utiliserez pour appeler une fonction ou apporter des modifications à une propriété dans votre contrôleur de vue. Il a également un type associé, UIButton.heart (ou heart : UIButton) .

La classe hearts est un objet modèle. C'est une classe qui représente une seule unité de données : une séquence de cœurs. Il contient une chaîne et un tableau de chaînes, qui représentent la séquence.

La classe hearts stocke la séquence de cœurs sous la forme d'un tableau de chaînes. Il n'utilise aucune autre structure de données, nous n'avons donc pas à nous soucier de choses comme le tri, la recherche, etc.

La classe hearts utilise la classe NSUserDefaults pour enregistrer les données.

Il existe une classe d'interface utilisateur, qui est un objet contrôleur. Il contient une étiquette et quelques autres méthodes, mais les données qu'il contient sont le texte d'une chaîne. Il utilise également la classe NSUserDefaults pour enregistrer les données.

La classe UI est un objet de la classe NSUserDefaults. Il a quelques méthodes qui lui sont associées, et il a une propriété nommée userDefaults , mais il ne contient aucune donnée.

La classe de contrôleur de vue est un objet contrôleur. Il a quelques méthodes pour faire des choses comme créer un cœur ou trouver tous les cœurs, et c'est une classe de la classe NSUserDefaults. Il a une propriété pour stocker une séquence de cœurs et quelques autres propriétés, et il contient un cœur : propriété UITextField qui contient la valeur dans cet objet de modèle.

La classe de contrôleur de vue est une classe de la classe NSUserDefaults. Certaines fonctions lui sont associées, mais ce n'est qu'une structure de données.

Le contrôleur de vue, avec sa classe NSUserDefaults, constitue un UITableViewController. C'est une implémentation concrète d'une classe UITableViewController.

Le contrôleur de vue, sa classe NSUserDefaults et son modèle de cœur sont tous encapsulés dans un objet, appelé Singleton. Il s'agit d'un objet qui sera accessible de partout, et il n'a aucune propriété, méthode ou autre fonctionnalité. Il existe car il sera réutilisé et instancié plusieurs fois, et il y aura plus d'une instance de celui-ci dans l'application à la fois.

Le contrôleur de vue et le modèle de données peuvent être rendus accessibles à tous ceux qui ont besoin de les utiliser. Le UITableViewController peut recevoir des données pour remplir sa vue tabulaire et configurer certaines de ses caractéristiques, et le contrôleur peut répondre en les plaçant dans sa propre structure de données et en les présentant à l'écran.

Les singletons sont parfois considérés comme une mauvaise idée. Ils constituent une solution simple à un problème difficile : partager une instance d'objet entre différentes parties de votre application. Si vous avez une instance de modèle qui n'a pas besoin d'accès par autre chose, faites-en un Singleton. Si l'objet est toujours accessible par une classe et uniquement par cette classe, alors faites-en un Singleton. S'il peut être nécessaire d'accéder à l'objet à partir de plusieurs classes de votre application, faites-en une classe normale. Assurez-vous que le singleton est thread-safe, car il peut être utilisé à partir de nombreux threads à un moment donné.

Créer le singleton

Le singleton dans notre exemple d'application est juste un singleton qui gère un ensemble de classes NSUserDefaults. C'est un singleton car l'objet n'aura toujours qu'une seule instance.

Nous allons le créer comme ceci :

La méthode initWithKey est un initialiseur requis pour les singletons. Il doit recevoir une chaîne de clé pour le singleton. Ensuite, il crée un singleton à partir de la clé. Il renvoie le Singleton nouvellement créé, ou nil s'il n'a pas pu en créer un.

Les méthodes de classe sur Singleton permettent d'obtenir et de définir des variables dans le Singleton. Par exemple, nous pouvons obtenir toutes les données NSUserDefaults dont nous avons besoin en lui demandant de renvoyer le tableau des préférences actuelles.

Comme vous pouvez le voir, il existe également des méthodes de classe pour obtenir et définir des préférences pour une clé donnée. Ceux-ci fonctionnent de la même manière, mais vous devrez peut-être lancer le Singleton.

Enfin, nous devrons utiliser le Singleton partout où il est utilisé.

Le NSUserDefaults peut également être un Singleton, mais il a une méthode différente pour obtenir ses propriétés. Il est également thread-safe, mais il a plus de travail à faire. Voyons donc comment cela fonctionne :

Nous demandons au Singleton d'obtenir l'objet NSUserDefaults actuel et d'en faire le délégué de l'objet prefs nouvellement créé. Ensuite, nous devons créer un nouveau NSUserDefaults.

Nous lui demandons d'obtenir les valeurs NSUserDefault actuelles et de les attribuer aux nôtres. Les autres méthodes fonctionnent de la même manière.

Les méthodes de classe NSUserDefaults fournissent un moyen de mettre des préférences dans les valeurs par défaut de l'utilisateur, nous devrons donc les implémenter.

Pour compléter le tableau des méthodes de classe, NSUserDefaults fournit un moyen de définir les valeurs par défaut pour une clé donnée.

Pour compléter le tableau des méthodes de classe, NSUserDefaults fournit un moyen de définir les valeurs par défaut pour une clé donnée.

Nous allons définir la valeur par défaut pour le defaultKey dans le NSUserDefaults lors de sa création. Nous allons créer une méthode appelée « setDefaults : » pour faciliter la définition des valeurs par défaut pour une clé particulière.

Nous allons définir la valeur par défaut pour le defaultKey dans le NSUserDefaults lors de sa création


Voir la vidéo: Hauska Kissojen Hauska Kissa Videoita (Décembre 2021).

Video, Sitemap-Video, Sitemap-Videos