Swift Language
Des classes
Recherche…
Remarques
Le init()
est une méthode spéciale dans les classes qui est utilisée pour déclarer un initialiseur pour la classe. Plus d'informations peuvent être trouvées ici: Initialiseurs
Définir une classe
Vous définissez une classe comme ceci:
class Dog {}
Une classe peut aussi être une sous-classe d'une autre classe:
class Animal {}
class Dog: Animal {}
Dans cet exemple, Animal
pourrait également être un protocole auquel Dog
conforme.
Sémantique de référence
Les classes sont des types de référence , ce qui signifie que plusieurs variables peuvent faire référence à la même instance.
class Dog {
var name = ""
}
let firstDog = Dog()
firstDog.name = "Fido"
let otherDog = firstDog // otherDog points to the same Dog instance
otherDog.name = "Rover" // modifying otherDog also modifies firstDog
print(firstDog.name) // prints "Rover"
Comme les classes sont des types de référence, même si la classe est une constante, ses propriétés de variable peuvent toujours être modifiées.
class Dog {
var name: String // name is a variable property.
let age: Int // age is a constant property.
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let constantDog = Dog(name: "Rover", age: 5)// This instance is a constant.
var variableDog = Dog(name: "Spot", age 7)// This instance is a variable.
constantDog.name = "Fido" // Not an error because name is a variable property.
constantDog.age = 6 // Error because age is a constant property.
constantDog = Dog(name: "Fido", age: 6)
/* The last one is an error because you are changing the actual reference, not
just what the reference points to. */
variableDog.name = "Ace" // Not an error because name is a variable property.
variableDog.age = 8 // Error because age is a constant property.
variableDog = Dog(name: "Ace", age: 8)
/* The last one is not an error because variableDog is a variable instance and
therefore the actual reference can be changed. */
Testez si deux objets sont identiques (pointez sur la même instance) en utilisant ===
:
class Dog: Equatable {
let name: String
init(name: String) { self.name = name }
}
// Consider two dogs equal if their names are equal.
func ==(lhs: Dog, rhs: Dog) -> Bool {
return lhs.name == rhs.name
}
// Create two Dog instances which have the same name.
let spot1 = Dog(name: "Spot")
let spot2 = Dog(name: "Spot")
spot1 == spot2 // true, because the dogs are equal
spot1 != spot2 // false
spot1 === spot2 // false, because the dogs are different instances
spot1 !== spot2 // true
Propriétés et méthodes
Les classes peuvent définir des propriétés que les instances de la classe peuvent utiliser. Dans cet exemple, Dog
a deux propriétés: name
et dogYearAge
:
class Dog {
var name = ""
var dogYearAge = 0
}
Vous pouvez accéder aux propriétés avec une syntaxe à point:
let dog = Dog()
print(dog.name)
print(dog.dogYearAge)
Les classes peuvent également définir des méthodes pouvant être appelées sur les instances, elles sont déclarées similaires aux fonctions normales, juste à l'intérieur de la classe:
class Dog {
func bark() {
print("Ruff!")
}
}
Les méthodes d'appel utilisent également la syntaxe à points:
dog.bark()
Classes et héritage multiple
Swift ne prend pas en charge l'héritage multiple. En d'autres termes, vous ne pouvez pas hériter de plus d'une classe.
class Animal { ... }
class Pet { ... }
class Dog: Animal, Pet { ... } // This will result in a compiler error.
Au lieu de cela, vous êtes encouragé à utiliser la composition lors de la création de vos types. Cela peut être accompli en utilisant des protocoles .
deinit
class ClassA {
var timer: NSTimer!
init() {
// initialize timer
}
deinit {
// code
timer.invalidate()
}
}