La mise en œuvre sur laquelle les chercheurs novices tombent est généralement fixe. ** ・ Délégué ·fermeture · La communication · La gestion des erreurs ·architecture** N'y a-t-il pas beaucoup de débutants qui obtiennent "?" Par ici? Et tous sont très importants pour le développement.
Ici, je voudrais faire en sorte que le contenu comprenne le traitement de la communication API. J'omets les explications qui sont écrites dans chaque article.
Si vous voulez comprendre Delegate https://qiita.com/Sossiii/items/6c8916f96176991f19aa J'aimerais que vous lisiez cet article. Il était également très populaire sur Twitter.
Nous publions également une carte de compétences (feuille de route) pour se rendre au travail par des personnes inexpérimentées. https://qiita.com/Sossiii/items/e2c846d12f2f5db7c426
https://qiita.com/NagaokaKenichi/items/df4c8455ab527aeacf02 Il est décrit en détail dans cet article, mais il est difficile pour les débutants. Pour vous donner une idée approximative en lisant cet article Il s'agit pour ** de recevoir ** certaines informations ** de ** externes ** par ** communication **. Par exemple, lors du développement d'une application, vous pouvez utiliser les informations d'événement sur l'écran de gestion. Il y a des moments où vous souhaitez l'envoyer du côté de l'application. Pour cette raison, nous ne pouvons pas mettre à jour l'application une par une. Si vous utilisez la communication API, "S'il y a des informations sur l'événement, affichez-les dans l'application" Vous pouvez implémenter une logique telle que.
Maintenant que vous avez une idée approximative de l'API Ensuite, je vais vous expliquer la marche à suivre pour l'utiliser. La première chose à faire est de vérifier ** quel type de données sera envoyé **.
Le flux général du traitement des communications API est ** 1 ・ Lancer une demande 2. Recevoir des données 3. Mappez les données reçues 4. Utilisez réellement les données mappées ** Mais au stade de la cartographie Si le type de données est différent ou si la structure du côté récepteur est différente Le mappage échouera. Par conséquent, vérifiez d'abord ** quel type de données sera envoyé **.
La seule façon de vérifier est de rechercher l'URL. https://covid19-japan-web-api.now.sh/api//v1/prefectures Par exemple, à cette URL qui publie l'état d'infection du virus corona Accédons-y.
Ce que vous devez vérifier ici, c'est "clé", "valeur et son type" et "structure de données". La clé correspond à id, name_ja, name_en, etc. dans l'image. la valeur correspond à 1 (Int), "Hokkaido" (String), "Hokkaido" (String) La structure des données est hiérarchique {} ou tableau [].
Je ne sais pas pourquoi je dois les vérifier sans sortir, donc Ah, s'il vous plaît lisez la suite pour voir s'il existe une telle chose.
Une fois que vous avez compris la structure de données envoyée, vous pouvez la mapper. J'écrirai le code. À partir des données envoyées dans le mappage Extrayez les données que vous souhaitez utiliser et rendez-les disponibles dans la langue de l'utilisateur.
https://covid19-japan-web-api.now.sh/api//v1/prefectures Prenons le cas de l'utilisation de id, name_ja, pcr à partir des données envoyées. Dans ce cas, en faisant attention à la clé, à la valeur et à la structure de la pièce que vous souhaitez connaître, ce sera comme suit.
[
{
id:1
name_ja: "Hokkaido",
...
pcr: 85892,
},
{
id:2
name_ja: "Aomori",
...
pcr: 5350,
},
...
]
Écrivons maintenant un modèle pour le mappage. Après avoir ouvert Xcode, créons un nouveau fichier. Le nom du fichier est Covid.swift.
//Covid.swift file
struct CovidInfo: Codable {
let id: Int
let nameJa: String
let pcr: Int
//Conversion de variables de deux mots ou plus en cas de serpent avec CodingKey
//Le cas du serpent est appliqué lors de la cartographie
enum CodingKeys: String, CodingKey {
case nameJa = "name_ja"
}
}
Fondamentalement, les noms de variables / constantes sont des cas de chameau inférieurs (https://wa3.i-3-i.info/word13956.html) Je l'ai écrit comme ci-dessus (nameJa) parce que j'ai besoin de l'écrire Les données JSON renvoyées sont ** name_ja **, n'est-ce pas?
Lors du mappage, si la méthode d'écriture ici est différente, elle échouera, donc Vous devez lui donner la même forme. ** Coding Key ** y joue un rôle actif. enum CodingKey: String, CodingKey {} Vous correspondez avec.
Maintenant que la soucoupe pour la cartographie est terminée, Dans la prochaine étape, nous ferons une demande.
Pour le traitement de l'API, créez un nouveau fichier API et rendez-le commun. Appelons cela API.swift. Je souhaite utiliser une bibliothèque comme Alamofire ou Moya, Pour ceux qui débutent, nous procéderons sans utiliser la bibliothèque ici.
struct CovidAPI {
static func getPrefectures(completion: @escaping ([CovidInfo]) -> Void) {
let url = URL(string: "https://covid19-japan-web-api.now.sh/api//v1/prefectures")
let request = URLRequest(url: url!)
URLSession.shared.dataTask(with: request) { (data, response, error) in
if let data = data {
let result = try! JSONDecoder().decode([CovidInfo].self, from: data)
completion(result)
}
}.resume()
}
}
Je vais vous expliquer dans l'ordre du haut.
static func getPrefectures(completion: @escaping ([CovidInfo]) -> Void)
//Vers CovidInfo[]Est attaché lors de la vérification de la structure des données à l'étape 1[ ]Était attaché(Était dans un tableau)
//Car. Puisque plusieurs données voleront, je vais en faire un tableau dans le traitement des appels.
//En ajoutant de la statique, vous n'avez pas besoin d'instancier l'API Covid de l'extérieur
//J'essaye de l'appeler.
//S'il y a statique
CovidAPI.getPrefectures()
//S'il n'y a pas de statique
CovidAPI().getPrefectures()
//J'utilise une clôture comme argument.
//Les données de la fonction ne peuvent pas être reportées par défaut.
//@C'est possible en ajoutant un échappement.
URLSession.shared.dataTask(with: request) { (data, response, error) in
if let data = data {
let result = try! JSONDecoder().decode([CovidInfo].self, from: data)
completion(result)
}
}.resume()
//J'étais en train de faire une demande sur la ligne URLSession{()}À l'intérieur se trouve la réponse.
//Étant donné que les données seront les données souhaitées, uniquement si les données sont renvoyées dans l'instruction if let
//Vous cartographiez.
//Faire correspondre les données au type CovidInfo(cartographie)Attribuer au résultat constant
//Passé à l'achèvement.(Renvoyer les données à l'appelant)
Maintenant que vous êtes prêt à utiliser la communication API, appelons-la à partir du contrôleur de vue.
//ViewController.swift
CovidAPI.getPrefectures(completion: {(result: [CovidInfo]) -> Void in
DispatchQueue.main.async {
idLabel.text = "\(result.id)"
nameLabel.text = "\(result.nameJa)"
pcrLabel.text = "\(result.pcr)"
}
})
Pour idLabel, nameLabel, pcrLabel, préparez UILabel () par vous-même et placez-le à l'écran. Une fois les données reflétées, les étapes de cet article sont terminées.
Avez-vous compris le flux de traitement autour de la communication? ** 1 ・ Lancer une demande 2. Recevoir des données 3. Mappez les données reçues 4. Utilisez réellement les données mappées ** Je vais le faire dans le flux de, mais pour la cartographie de 3 ** 1 ・ Vérifiez les données renvoyées (nom des données et structure des données) 2. Décidez des données que vous souhaitez recevoir et préparez une soucoupe (type) ** Deux étapes sont nécessaires. Le traitement de la communication échoue simplement parce que le type de soucoupe et le nom de la variable sont différents. Il n'est pas exagéré de dire que les deux étapes ici sont les plus importantes.
C'est l'une des implémentations où le début est le plus difficile, j'espère donc que ce sera utile autant que possible.
Recommended Posts