Ce sont des propriétés qui ne stockent aucune valeur, elles possèderont cependant un getter et un setter pour obtenir des mettre en place des valeurs.

Commencons avec le getter: 

struct Voiture {
    //Ajout des propriétés
    var marque: String = “Toyota”
    var modele: String = “Yaris”
    var année: Int = 2018
    var kms: Int = 20150
    var couleur: String = “Gris”
    var kmsString: String {
        get {
            return “Nombre de kilomètres: (kms)”
        }
    }
    //Ajout des méthodes
}
var maJolieVoiture = Voiture()
print(maJolieVoiture.kmsString)
//Nombre de kilomètres: 20150 

cette variable ne contient pas de valeur, nous savons juste qu’elle sera de type string. Lorsqu’elle sera appelée, nous allons effectuer le code dans le get (mot clé pour obtenir) et nous retournerons la valeur voulue. 

Si nous n’avons pas de set, le mot clé get est optionnel. nous retournerons uniquement la valeur voulue:

class Ordinateur {
    //Ajout des propriétés
    var marque: String = “Apple”
    var modele: String = “iMac 27”
    var année: Int = 2019
    var processeur: String = “Core i7”
    var ram: Int = 16
    var stockage: Int = 256
    var défintion: (Int, Int) = (4000, 2000)
    //Ajout des méthodes
    var completeName: String {
        return marque + ” “ + modele
    }
} 
Dvar iMac = Ordinateur()
print(iMac.completeName)
//Apple iMac 27 

Avec le setter maintenant, nous allons utiliser le mot clé set et entre parenthèses sera notre nouvelle valeur. Pour définir une valeur à une propriété donnée.

class Ordinateur {
    //Ajout des propriétés
    var marque: String = “Apple”
    var modele: String = “iMac 27”
    var année: Int = 2019
    var processeur: String = “Core i7”
    var ram: Int = 16
    var stockage: Int = 256
    var défintion: (Int, Int) = (4000, 2000)
    //Ajout des méthodes
    var completeName: String {
        return marque + ” “ + modele
    }
    var ramComputed: String {
        get {
            return “(ram)”
        }
        set(newValue) {
            ram = Int(newValue) ?? ram
        }
    }
}
 

La variable ramComputed est en String, mais j’aurais très bien pu la définir en tant que Int directement. Ce qui nous donne:

var iMac = Ordinateur()
iMac.ramComputed = “32”
print(“Nouvelle ram ajoutée: (iMac.ram)”) 

C’est très bien ceci, mais cela est il bien utile étant donné que nos propriétés stockées font exactement la même chose? Cela nous permet  plusieurs choses:

  • Personnaliser la donnée reçue, par exemple pour le nombre de kilomètres.
  • Obtenir des données différentes des propriétés. Par exemple obtenir un pointX ou Y à partir d’un cadre de vue, ou son centre.
  • Définir des propriétés comme privées et ajouter de la sécurité au code. Par toutes les propriétés pourront être modifiées et lues et sous certaines conditions.