Date operateur +=

Bonjour à tous,

Comment utiliser l'opérateur += sur une variable de type Date ?

var now: Date = Date()
now += ...
Mots clés:

Réponses

  • DrakenDraken Membre

    now.addingTimeInterval(...)

  • Joanna CarterJoanna Carter Membre, Modérateur
    16 juin modifié #3

    Tu peux aussi faire :

    extension Date
    {
      static func +=(left: inout Date, right: TimeInterval)
      {
        left = left.addingTimeInterval(right)
      }
    
      static func -=(left: inout Date, right: TimeInterval)
      {
        left = left.addingTimeInterval(-right)
      }
    }
    
    {
      var now = Date()
    
      let vingtQuatreHeures = 1.0 * 60 * 60 * 24
    
      now += vingtQuatreHeures
    
      now -= vingtQuatreHeures
    }
    
  • xylowebxyloweb Membre

    Merci pour vos réponses.

    En fait j'avais oublié de préciser la version de Swift

    macbookpro-jmm-2380:~ jmm$ swift --version
    Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
    Target: x86_64-apple-macosx10.9
    

    Et justement dans la version 3 à priori la function += est bien implémentée, donc il suffit de comprendre la signification des attributs (left: inout Date et right: TimeInterval) … que je n'avais pas compris…

    var now: Date = Date()
    print(now)
    let oneDay: TimeInterval = 24 * 60 * 60
    now += oneDay
    print("now + one day : \(now)")
    

    Au passage, remarquez le typage de la variable oneDay… (et oui Swift est un language fortement typé)

    Venant d'Objective-C je me mets à Swift alors il va falloir être indulgent ;-) je vais sans doute poser des questions un peu futiles…

  • @xyloweb a dit :
    Venant d'Objective-C je me mets à Swift alors il va falloir être indulgent ;-) je vais sans doute poser des questions un peu futiles…

    Il n’y a jamais de questions futiles quand on apprend. :blush:

  • Pour aller dans le sens de Joanna, une des killer feature de Swift est la possibilité de créer son propre opérateur (s'il n'existe pas déjà, autrement il faut l'override):

    Voici un exemple de custom operator:

    infix operator +=  :  AdditionPrecedence
    infix operator ∆  :  AdditionPrecedence
    
    class aClass {
        static func += (leftObject: aClass, rightObject: aClass ) -> <WhateverYouWant> {
            // Code goes here:
        }
        static func ∆ (leftObject: aClass, rightObject: anOtherClass ) -> <WhateverYouWant> {
            // Code goes here:
        }
    }
    

    Une des choses remarquable est que vous pouvez additionner deux Carottes et retourner une Salade, vous pouvez additionner un tableau de Courgette et une Aubergine pour finalement retourner un objet Ratatouille. Ce n'est pas spécialement conseillé car les opérateurs doivent être limpide et sans doute d'interprétation, mais j'ai trouvé ça incroyable quand je l'ai appris. :)

    La partie custom operator de la doc ainsi que de ces articles m'avaient bien aidé:
    http://nshipster.com/swift-operators/
    https://medium.com/@johnsundell/custom-operators-in-swift-284837290f43

  • Joanna CarterJoanna Carter Membre, Modérateur

    @Mayerick Si tu veux fournir un opérateur composé comme +=, c'est entendu que la fonction ne devrait pas renvoyer une valeur. Par contre, il faut mettre le premier paramètre comme inout parce que c'est attendu que le var (à gauche de l'opérateur) soit affecté par l'opération.

  • @Joanna Carter toutes mes excuses, il va de soit que tu as raison. J'ai ajouté l'exemple du += mais il n'est pas tiré de mon code contrairement au et je n'ai pas fait attention. Le but était de montrer que tout est possible avec ces opérateurs, mais j'aurais en effet dû tiquer sur le +=. Un grand merci pour cette précision :)

Connectez-vous ou Inscrivez-vous pour répondre.