Formation PUB900 : Développer une application pour iPhone avec SwiftUI, H-2024 Fonctions obsolètes ou anciennes syntaxes

78.1 onChange() avant iOS 17


Depuis iOS 17, la syntaxe de onChange() a été simplifiée.

Dans les extaits de code qui suivent, je vous montre comment le onChange() était réalisé avant iOS 17.

Si vous utilisez cette syntaxe avec iOS 17 ou plus, vous obtiendrez un message du genre « 'onChange(of:perform:)' was deprecated in iOS 17.0: Use `onChange` with a two or zero parameter action closure instead. ».

SwiftUI

struct ContentView: View {
  @State private var uneVariable: String = ""

  var body: some View {
    VStack {
      ...
    }
    // syntaxe avant iOS 17
    .onChange(of: uneVariable, perform: { nouvelleValeur in
      print(uneVariable)   // affiche la nouvelle valeur
      print(nouvelleValeur)   // affiche la nouvelle valeur
      ...
    })

  }
}

Ignorer la valeur

Si, dans le bloc de code, vous n'avez pas besoin de travailler avec la valeur de la variable, vous pouvez l'ignorer en utilisant une barre de soulignement.

SwiftUI

struct ContentView: View {
  @State private var uneVariable: String = ""

  var body: some View {
    VStack {
      ...
    }
    // syntaxe avant iOS 17
    .onChange(of: uneVariable, perform: { _ in
      ...
    })

  }
}

Valeur originale vs valeur modifiée

Dans le cas où vous avez besoin de connaître la valeur originale de même que la nouvelle valeur, vous pouvez mettre le vrai nom de la variable entre crochets carrés, devant le nom que vous désirez donner à la nouvelle valeur.

SwiftUI

struct ContentView: View {
  @State private var uneVariable: String = ""

 

  var body: some View {
    VStack {
      ...
    }
    // syntaxe avant iOS 17
    .onChange(of: uneVariable, perform: { [uneVariable] nouvelleValeur in
      print(uneVariable)   // affiche la valeur originale
      print(nouvelleValeur)   // affiche la nouvelle valeur
    })
  }
}

 

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre