Tableaux et types

da capo

abonné absent
Club MacG
12 Août 2001
17 409
3 647
Bonjour, malgré mes recherches je n'arrive pas à savoir si un tableau peut être multi type.

Je n'utilise peut-être pas le bon vocabulaire alors voilà un exemple de ce je voudrais pouvoir manipuler.

let tableau: [[??????]] = [

["1.png",0,45000,"info 1"],
["2.png",43000,54000,"info 2"],
["1.png",54000,86400,"info 3"],
]

Mon intérêt est de mixer des types String et Int (ou Float) pour faciliter leur traitement ultérieur.

En effet, j'ai constaté que la conversion String → Int lui donne un statut "optionnel" que je peux dépasser en rajoutant ?? et une valeur par défaut.

Un peu lourdingue pour moi qui débute mais si je n'ai pas le choix…

Pourquoi un tableau ?
Parce qu'en utilisant un boucle, je peux facilement tester l'une ou l'autre des entrées, en récupérer l'index etc.
Parce que dans un développement équivalent en javascript (bien moins exigent en matière de type de données), cela fonctionnait parfaitement.

Merci par avance.
Et soyez sur(e) que je reviendrai vers vous ;-)
 

Chris K

Unité d’ombre
16 Juillet 2015
1 145
354
47
Salut,

As-tu regardé du côté du type Any ?
 

da capo

abonné absent
Club MacG
12 Août 2001
17 409
3 647
J’ai fait quelques essais mais pas très concluants.
Je peux encore essayer.
 

da capo

abonné absent
Club MacG
12 Août 2001
17 409
3 647
Au regard des informations que je glane à droite et à gauche, rien ne correspond vraiment.
Swift est en évolution constante et cela doit expliquer que ce qui possible à un instant t pour une version n de Swift ne le sera plus à un temps t+n pour Swift en version n++.

Bref, j'en reviens à ma question initiale : est-il possible de créer des tableaux à 2 dimensions mettant en oeuvre des types de données variés ou faut-il passer par un objet ?

Je peux bien sûr décrire mes besoins, ma description des données à traiter, des fonctions et tout le tralala.
 

les_innommables66

Membre d’élite
Club MacG
26 Février 2006
1 103
110
Bonsoir,

Et comme ceci ?

var tableau = [(String,Int,String)]()
tableau.append((("1.png", 54000,"toto")))

Cordialement
Nicolas
 
  • J’aime
Réactions: Chris K

les_innommables66

Membre d’élite
Club MacG
26 Février 2006
1 103
110
Voire

var tableau = [(nom:String,valeur:Int,commentaire:String)]()
tableau.append((("1.png", 54000,"toto")))
tableau[0].nom
 

les_innommables66

Membre d’élite
Club MacG
26 Février 2006
1 103
110
Ou encore:

Bloc de code:
struct MaStructure {
    let element: Array<Any>
   
    init(name:String, value:Int,comment:String) {
        self.element = [name,value,comment]
    }
}

let element1 = MaStructure(name: "1.png", value: 54000, comment: "toto")
let element2 = MaStructure(name: "2.png", value: 24000, comment: "tata")

let tableau:[MaStructure] = [element1, element2]
 

les_innommables66

Membre d’élite
Club MacG
26 Février 2006
1 103
110
Et sinon, puisque tu dis que tu débutes, ce serait sans doute préférable de passer par des objets; décris nous ton besoin sans préjuger de la solution, comme tu le suggères dans ton post #4 ?

Cordialement,
Nicolas
 

da capo

abonné absent
Club MacG
12 Août 2001
17 409
3 647
Alors voilà une tentative de description du projet.
Je précise que ce projet existe déjà mais s'appuie aujourd'hui sur un accès à un mini-site déployé en utilisant HTML5, css et javascript.
L'établissement qui m'a confié ce projet m'a laissé que peu de temps pour répondre ce qui a justifié mon choix de technologies.
Aujourd'hui et après des retours positifs sur le fonctionnement, et quelques "touches" je me pose donc la question du portage en application pour iPad.

L'idée est de présenter le film diffusé dans une salle (et le film à venir) sur une tablette positionnée à l'extérieur de la salle.
Aucune interaction n'est demandée.

Je dispose à la base des informations suivante pour chaque entrée dans le programme :
image - horaire début - horaire fin - auteur - titre - année - durée réelle


Il s'agit de court-métrages, donc on a une répétition des mêmes films mais avec des horaires différents.
Dans le projet initial, j'ai aussi des variations selon la période (tel mois, telle programmation etc).

Mais ne compliquons pas tout d'entrée : admettons que la programmation est toujours la même au cours de la journée.

Je mets en image attachée une description de l'affichage souhaité (très basique et cloutée pour un principe de discrétion)


j'espère que cela suffisant pour une première approche.

Merci de votre aide
 

Fichiers joints

da capo

abonné absent
Club MacG
12 Août 2001
17 409
3 647
Je rajoute un lien vers la version web (juste une esquisse) anonymisée

http://dacapoo.free.fr/prg-macg/

les heures de diffusion vont de 10h à 22h environ
 

Larme

Vétéran
Club MacG
11 Décembre 2007
6 491
396
Paris
Crée un modèle.
Ne te bases pas uniquement sur un array d'array auquel il faudra retenir que l'objet à l'index 0 correspond à telle info, celui à l'index 1 à telle info, etc.
Évite les tuples, créé un structure custom.

Évidemment on peut faire sans, mais je ne le conseillerais en aucun cas autre que pour tester rapidement.
 

da capo

abonné absent
Club MacG
12 Août 2001
17 409
3 647
OUpps…
Merci pour ta réponse, mais je débute.

Je retiens donc "structure custom" pour mes recherches à venir.
 

Larme

Vétéran
Club MacG
11 Décembre 2007
6 491
396
Paris
Si on prends ça :
["1.png",0,45000,"info 1"]

Je créerais un truc du genre, en essayant de deviner le sens des infos :

struct Movie {
let imageName: String
let startDate: Date //??
let endDate: Date //??
let text: String
}

Tu devrais avoir un implicite : init(imageName:startDate:endDate:text)
 

da capo

abonné absent
Club MacG
12 Août 2001
17 409
3 647
ok.
Je reprends et je précise.

il s'agit d'afficher entre un temps t1 et un temps t2, une image et des informations.

J'ai donc à minima 4 éléments de type différents comme tu le proposes mais je vais renommer tout ça :

struct Movie {
let imageName: String
let startTime: Int // nb de secondes depuis 00:00:00
let endTime: Int // idem
let text: String
}

Imaginons qu'une information concerne un film doive être diffusée de 10h00 à 10h30
startTime prendrait pour valeur : 36000 (c'est à dire à la 36000ème seconde de la journée 10x3600)
endTime prendrait pour valeur : 37800 (10,5 x 3600 secondes)

En choisissant de manipuler des nombres entiers plutôt que des dates, je pense me simplifier un peu la vie.
La durée en secondes est déductible facilement, sa conversion en minutes et secondes aussi au besoin, comme le pourcentage d'avancement de la diffusion un ratio qui pourra être utilisé pour faire évoluer une barre de progression.

Mais pour en revenir au sujet même des données. Elles ne feront pas l'objet d'une interaction : elles existent : j'ai 80 enregistrements environ qui couvrent la journée entière.

L'idée n'est donc pas de permettre l'ajout à un tableau, structure ou objet d'éléments, mais plus prosaïquement l'exploitation d'un ensemble d'enregistrements ou occurrences déjà définis.

J'espère avoir été plus clair.
 
  • J’aime
Réactions: Ansselme77