Swift 4.1 est en préversion dans Xcode 9.3 bêta

Par:
fredericmazue

lun, 29/01/2018 - 16:45

Un billet sur swift.org annonce la sortie de Swift 4.1 en préversion dans Xcode 9.3 bêta.

Swift 4.1 est compatible au niveau source avec Swift 4.0, mais n'est pas compatible au niveau binaire.

Swift 4.1 vient avec des améliorations intéressantes, qui rendent le langage moins verbeux.

Soit par exemple un type Person :

struct Person {
    var firstName: String
    var middleName: String
    var age: Int
    var city: String
}

Jusqu'ici, si l'on voulait pouvoir comparer deux instances de ce type, il fallait le déclarer de cette manière :

struct Person: Equatable {
    var firstName: String
    var lastName: String
    var age: Int
    var city: String
 

    static func ==(lhs: Person, rhs: Person) -> Bool {
        return lhs.firstName == rhs.firstName && lhs.lastName == rhs.lastName && lhs.age == rhs.age && lhs.city == rhs.city
    }
}

La méthode ==, au coeur de l'opération de comparaison, n'est pas le plus beau code qui soit. Fastidieux à écrire, fastidieux à relire, laid.

Swift 4.1 amène le support synthétisé du protocole Equatable. Concrètement Swift 4.1 va générer automatiquement une méthode == pour faire une comparaison membre à membre de la structure de donnée Equatable, comme le fait le code de la méthode == de l'exemple ci-dessous.  Soulagement... :-)

De façon similaire, Swift 4.1 amène le support synthétisé du protocole Hashable. Autrement dit, Swift 4.1 va générer automatiquement une propriété hashValue pour les types Hashable.