Détails du sujet

Programmation Orientée Objet en Swift : class, struct

Retrouvez la syntaxe des fonctions de base de la POO en Swift.

Toutes les cartes

Définir un struct avec des propriétés initialisées et d'autres optionnelles.

struct Pixel {
    var positionX = 0
    var positionY = 0
    var height: Int?
    var color: UIColor?
}

Définir un struct simple avec des propriétés initialisées

struct Pixel {
var positionX = 0
var positionY = 0
}

Créer une instance d'un struct avec les valeurs standard.

struct Pixel {
var positionX = 0
var positionY = 0
}
var myPixel = Pixel()

Accéder à des propriétés

myPixel.positionX
myPixel.height

struct et class

Définir une valeur pour une propriété.

myPixel.height = 4
myPixel.color = UIColor.black

Créer une instance d'un struct avec l'initializer standard.

struct Pixel {
var positionX: Int
var positionY: Int
}
let myPixel = Pixel(positionX: 4, positionY: 2)

Les struct sont passées par ...

Les struct sont passées par valeur


Les class sont passées par ...

Les class sont passées par référence


Créer une méthode d'instance qui modifie une propriété d'instance

struct Pixel {
    var positionX = 0
    var positionY = 0
    mutating func moveOneRight() {
        positionX += 1
}
}
var pixel = Pixel()
pixel.moveOneRight()
   

Créer une class simple avec initializer

class Point {
    var posX: Float
    var posY: Float
var color: UIColor?
    init (x: Float, y: Float) {
        self.posX = x
        self.posY = y
    }
}

Héritage.

Définir une sous classe.

class SomeSubclass: SomeSuperclass {
// properties and methods here
}

Héritage. Comment redéfinir une méthode.

Une sous classe pour redéfinir une méthode de la super class. Il faut faire précéder la définition du préfixe override


Héritage.

Comment accéder aux méthodes et aux propriétés de la super classe depuis la sous classe ?

Avec le préfixe super

super.someMethod()
super.someProperty

Que font les extensions ?

Les extensions permettent d'ajouter des fonctionnalités à des class, struct, enum ou des protocoles, y compris à des types auxquels on n'a pas accès (par exemple des Int, String, ...).


Créer une extension qui retourne true si une chaîne contient la lettre a.

extension String {    
var containsA: Bool {
return self.range(of: "a") != nil
}
}

Ecrire une extension qui ajoute un entier à un entier.

extension Int {
    func plusX(x: Int)->Int {
        return self + x
    }
}
2.plus(x: 3) // donne 5

Une extension peut modifier la valeur de la variable.

Créer un extension qui ajoute 1 à un entier en le modifiant.

extension Int {
    mutating func plus1() {
        self += 1
    }
}
let number = 2
number.plus1()
number // est 3