Langage Swift �pour application mobile
Par F. Guerouate
1
Swift
« Est un langage de programmation moderne qui est sûr, rapide et interactif »
Apple
Annoncé le 2 juin 2014, lors de la Worldwide Developer Conferance (WWDC), implementé par Chris Lattner
Permet de créer des applications sous les systèmes iOS, OS X et WatchOS
2
L’IDE
Un seul choix: Xcode
Un seul système: OS X
3
4
Programme
5
Les variables
6
7
Les constantes
8
Les tuples
9
La concaténation
10
Les conditions
let age: Int = 32
if age >= 18 {
print("Vous êtes majeur, mais pas aux Etat-Unis. :(")
} else if age >= 21 {
print("Vous êtes majeur, et même aux Etat-Unis !")
} else {
print("Vous êtes mineur.")
}
11
Switch case
12
Les boucles
var nbDeLignes: Int
for nbDeLignes in 1...1000 {
print("\(nbDeLignes). Bonjour.")
}
13
for _ in 1..<1001 {
print( "Bonjour.")
}
Les boucles
14
Les tableaux et les dictionnaires
Exemple:
let prenoms = [”Sara", ”Ali", ”Mohammed", ”Maha”]
print(prenoms[2])
15
Les tableaux
var prenoms = [”Sara", ”Ali", ”Mohammed", ”Maha”]
// On ajoute en fin de tableau
prenoms = prenoms + [ ’ Nada"]
print(prenoms)
// Ou bien encore en début du tableau
prenoms = ["Jean"] + prenoms
print(prenoms)
// pour concaténer plus rapidemment en fin de tableau
prenoms += [ ’Nada"]
16
17
let Tabprenoms=["sara","Maha","mohammed","Ali"]
var i:Int8
for i in 0..<Tabprenoms.count {
print("- "+Tabprenoms[i]+" -")
}
for A in Tabprenoms{
print(A)
}
tableaux:
var name=["sara","toto","pim"]
name.insert("lala", at: 1)
print(name)
name.remove(at: 0)
print(name)
name.index(of: "sara") (nil s’il n exist pas)
18
for i in 0..<name.count
{
print("\(i):\(name[i])")
}
for (i ,ch) in name.enumerated()
{
print("\(i):\(name[i])")
}
19
Les dictionnaires
20
var dictionnaire: [type1: type2]
// type1 peut être identique à type2
// Par exemple
var dictionnaire: [String: Int]
clé
Valeur
Dans le dictionnaire:
21
let dic=["Nom":"xxxx","Prenom":"sara","Adresse":"yyy 45 yyyy","Ville":"Rabat"]
for (cle,valeur) in dic{
print(cle + " : ” + valeur)}
22
var monDictionnaireVide = [String:Int]()
Ou
var monDictionnaireVide: [String: Int] = [:]
Les fonctions en Swift
func Nomfonction(parametre1: Type, parametre2: Type, ...)
{ // Instructions
}
23
func nomDeLaFonction(parametre1: Type, parametre2: Type, ...) -> TypeRetour
{
// Instructions
return laValeurARetourner
}
Nomfonction(valeur1, paramètre2: valeur2, ...)
24
Les fonctions en Swift
25
Pour Swift on peut attribuer 2 mots à un paramètre:
Exemple:
func disBonjour(A prenom: String) {
print("Bonjour " + prenom + " !")
}
Pour appeler la fonction on l’appel avec le premier nom du paramètre:
disBonjour(A: ”Sara")
func disBonjour(_ prenom: String) {
print("Bonjour " + prenom + " !")
}
disBonjour( "Sara ")
26
On peut aussi omettre le nom du paramètre lorsqu'on appelle la fonction
func nom_fonction(fonct (type para .)->type retour)->type retour
Pour appeler la fonction:
No_fonction(nom_fonction_paramètre)
27
Fonction de saisi
func input() -> Int {
let strData = readLine();
return Int(strData!)!
}
var nombreEntre: Int
nombreEntre = input()
28
Les fermetures
29
Vous avez déjà appris que les fonctions peuvent être incroyablement puissantes et flexibles. Parce que les fonctions sont des fermetures, les fermetures sont aussi flexibles.
Cependant, toutes les fermetures ne sont pas une fonction
30
31
32
33
Fonction est un cas particulière de Closure. Fonction est une Closure nommé on peut dire que la Closure est une Fonction anonyme.
34
35
Quand on déclare une Fermeture, c'est pas nécessaire d'écrire le nom des paramètres. Ces paramètres peuvent être références par $0, $1,...
Exemple 1:
36
37
38
39
{
var keyboard = NSFileHandle.fileHandleWithStandardInput()
var inputData = keyboard.availableData return NSString(data: inputData, encoding:NSUTF8StringEncoding)! }
40
Exemple:
func input() -> String {
var keyboard = NSFileHandle.fileHandleWithStandardInput()
var inputData = keyboard.availableData
return NSString(data: inputData, encoding:NSUTF8StringEncoding)! as String }
41
Les énumérations
42
43
enum NomEnumeration{
case valeur1
case valeur2
…
}
enum NomEnumeration{
case valeur1, valeur2, …
}
44
* Var V=NomEnumeration.valeur
* V=.valeur
On peut l’utiliser dans switch case:
switch V{
case.valeur1:action1
case.valeur2:action2
…
}
45
Exemple:
enum Mouvement{
case gauche
case droit
case haut
case bas
}
46
Exemple:
enum IOSType{
case iPhone
case iPad
case iWatch
}
Var myDevice=IOSType.iPhone
47
// dans ce cas le type est connu
var myDevice: iOSDeviceType = .iPhone
// dans ce cas le type peut être déduit
if myDevice == .iPhone { print(”j’ai un iPhone!") }
48
49
enum IOSType{
case iPhone
case iPad
case iWatch
}
50
Les valeurs associées
Exemple:
enum IOSType{
case iPhone(String)
case iPad(String)
case iWatch
}
var myDevice = iOSType.iPhone("6")
51
var myDevice = iOSType.iPhone("6")
switch myDevice {
case .iPhone(let model): print("iPhone \(model)")
case .iPad(let model): print("iPad \(model)")
case .iWatch: print("iWatch")
default: print("not an iOS device")
}
52
Les valeurs associées
enum codes {
//code-bar
case UPCA(Int,Int,Int,Int)
case QRcode(String) }
Var code=codes.UPCA(3,98987,1,0)
code=.Qrcode(« http//…..»)
53
Valeurs Enum
(voir exemple 2)
54
Programmation orienté Objet pour Swift
55
//attributs
Func
}
56
57
//le constructeur
init(auteur:String,titre:String,editeur:String,annee:Int,nbrpage:Int) {
self.auteur=auteur
self.titre=titre
self.editeur=editeur
self.annee=annee
self.nbrpage=nbrpage
}
58
Pour déclarer un objet livre:
let Livre1 = Livre(auteur:"taher benjelloun",titre:"les enfants vide",editeur:"fff",annee:2018,nbrpage:200)
59
Les structures
60
61
�
struct Resolution{
var largeur : Double=10.5
var hauteur : Double=5.2
}
// let res=Resolution()
//ou
//let hd=Resolution(largeur: 1080,hauteur: 1920)�
//?type par valeur
var cinema=hd�
cinema.largeur=2048
62
63
Classes où structures
Créer un struct Personne avec les propriétés : nom, age, sexe, niveauScolaire
Créer quelques personnes les mettre dans un tableau
Ecrire une fonction qui prend en paramètre un tableau des personnes et qui renvoie un tableau composé des personnes de même niveau
64
Héritage et polymorphisme
Héritage
Class class_fille : classe_mere{
//attributs et méthodes hérité
//propre attributs et méthodes
}
L héritage multiple est interdit en Swift
Si la classe mère a un constructeur la class fille le possèdera après l’héritage
65
66
Si on veut qu’une méthode héritée ait une fonctionnalité propre a la classe fille
C’est un concept permettant de fournir une interface unique à des entités pouvant avoir différents types.
67
Override func nom_fonct{
//nouvelles instructions
}
68
Override func nom_fonct{
super.Nom_methode
//nouvelles instructions
}
69
Les protocoles
70
71
func NomMethode(arg1:type,arg2:type …)
Le corps des méthodes sera définie dans les classes qui seront associé a ce protocole
72
protocol NomProtocole{
// entête des methodes qui seront définies dans les classe associé au protocole
}
73
class NomClass:NomProtcole{
// définition des méthodes dans l’entête est présent dans le protocole
// les méthodes propre à la classe
}
74
class NomClass:NomProtcole1, NomProtocole2, … {
// définition des méthodes dans l’entête est présent dans le protocole
// les méthodes propre à la classe
}
75
class NomClass:NomClasseMere,NomProtcole1, NomProtocole2, … {
// définition des méthodes dans l’entête est présent dans le protocole
// les méthodes propre à la classe
}
76
77