Les Classes sous Swift – POO

Note: Document en cours de rédaction

Définition

Classe de base

 
Action – Construisons la classe ‘Personnage’ (dans le contrôleur de la scène principale)
 

struct TrackedString {
    private(set) var numberOfEdits = 0
    var value: String = "" {
    didSet {
        numberOfEdits++
    }
    }
}

 

//  Introduction aux classes sous swift
import UIKit
class ViewController: UIViewController {
    class Personnage {  // Par convention, en swift, le nom des types commencent par une lettre majuscule.
        var nom:String = ""
        var image:UIImage = UIImage()
        var force:Int = 0
        var compagnons = [String]()
        func description() -> String {
            return  "================================\n" +
                    "Personnage: \(nom)\n" +
                    "force: \(force)\n"    +
                    "--------------------------------\n" +
                    "Compagnons: \n\n"     +
                    "\(compagnons)\n"      +
                    "================================\n"
        }  // description
    }  // Personnage
     // Point d'entrée de l'application
    override func viewDidLoad() {
        super.viewDidLoad()
        var fred = Personnage()
        fred.nom = "Fred Cailloux"
        fred.force = 99
        println( "Description du personnage fred:\n\( fred.description() )" )
    } // viewDidLoad
}  // ViewController

Console:

Description du personnage fred: ================================ Personnage: Fred Cailloux force: 99 ——————————– Compagnons:  [] ================================


Classe avec une méthode init()

 

//  Introduction aux classes sous swift
import UIKit
class ViewController: UIViewController {
    class Personnage {
        var nom:String
        var force:Int
        var image:UIImage
        var compagnons:[String]
        init(nom:String, force:Int) {
           self.nom = nom  // self.nom permet de distinguer la propriété du paramètre
           self.force = force
           self.image = UIImage()
           self.compagnons = [String]()
        } // init
        func description() -> String {
            return  "================================\n" +
                    "Personnage: \(nom)\n" +
                    "force: \(force)\n"    +
                    "--------------------------------\n" +
                    "Compagnons: \n\n"     +
                    "\(compagnons)\n"      +
                    "================================\n"
        }  // description
    }  // Personnage
     // Point d'entrée de l'application
    override func viewDidLoad() {
        super.viewDidLoad()
        var perso = Personnage(nom:"Tor LeBoss", force:314)
         println( "Description du personnage:\n\( perso.description() )" )
    } // viewDidLoad
}  // ViewController

Console:

Description du personnage: ================================ Personnage: Tor LeBoss force: 314 ——————————– Compagnons:  [] ================================


Organisation des classes dans des fichiers

Action – Ajouter un nouveau groupe nommé ‘Mes classes’ au projet Atl+Cmd+N. Action – Ajouter un nouveau fichier de type ‘Swift file’ au projet Cmd+N intro-classe-01 intro-classe-02   intro-classe-03 Action – Déplacer la classe Personnage du contrôleur de la scène vers le fichier Personnage.swift Note: Xcode ne va pas reconnaitre la classe de type UIImage.  Son prototype est définit dans UIKit.  Il suffit d’ajouter « ‘import UIKit » au début du fichier pour corriger le problème.   Intro-Classe-04 Contenu du fichier ‘Personnage.swift’

//  Personnage.swift
import Foundation
import UIKit
class Personnage {
    var nom:String
    var force:Int
    var image:UIImage
    var compagnons:[String]
    init(nom:String, force:Int) {
        self.nom = nom  // self.nom permet de distinguer la propriété du paramètre
        self.force = force
        self.image = UIImage()
        self.compagnons = [String]()
    } // init
    func description() -> String {
        return  "================================\n" +
            "Personnage: \(nom)\n" +
            "force: \(force)\n"    +
            "--------------------------------\n" +
            "Compagnons: \n\n"     +
            "\(compagnons)\n"      +
            "================================\n"
    }  // description
}  // Personnage

Faisons les modifications suivantes au contrôleur :

    override func viewDidLoad() {
        super.viewDidLoad()
        var perso = Personnage(nom:"Tor LeBoss", force:314)
        let nomPerso = perso.nom
        println( "Le nom du personnage est \(nomPerso)")
    } // viewDidLoad

Testons l’application