web-dev-qa-db-fra.com

Quand utiliser les paramètres inout?

Lors du passage d'une classe ou d'un type primitif à une fonction, toute modification apportée à la fonction dans le paramètre sera répercutée à l'extérieur de la classe. C'est en gros la même chose qu'un paramètre inout est supposé faire.

Qu'est-ce qu'un bon cas d'utilisation pour un paramètre inout? 

57
4thSpace

inout signifie que la modification de la variable locale modifiera également les paramètres transmis. Sans cela, les paramètres transmis resteront la même valeur. Essayez de penser au type de référence lorsque vous utilisez inout et au type de valeur sans l’utiliser.

Par exemple:

import UIKit

var num1: Int = 1
var char1: Character = "a"

func changeNumber(var num: Int) {
    num = 2
    print(num) // 2
    print(num1) // 1
}
changeNumber(num1)

func changeChar(inout char: Character) {
    char = "b"
    print(char) // b
    print(char1) // b
}
changeChar(&char1)

Un bon cas d’utilisation sera la fonction swap qui modifiera les paramètres transmis.

Swift 3+ Remarque: À partir de Swift 3 , le mot clé inout doit venir après les deux points et avant le type. Par exemple, Swift 3+ nécessite maintenant func changeChar(char: inout Character).

89
Lucas Huang

Les paramètres de fonction sont des constantes par défaut. Tenter de modifier la valeur d'un paramètre de fonction à partir du corps de cette fonction entraîne une erreur lors de la compilation. Cela signifie que vous ne pouvez pas modifier la valeur d’un paramètre par erreur. Si vous souhaitez qu'une fonction modifie la valeur d'un paramètre et que ces modifications soient conservées une fois l'appel de la fonction terminé, définissez ce paramètre en tant que paramètre in-out.

 see image below for Description

17

le paramètre inout permet de modifier les données d'un paramètre de type valeur et de conserver les modifications après l'appel de la fonction.

0
H S Progr

lors de l'utilisation du paramètre inout Swift 4.0 Work

class ViewController: UIViewController {

    var total:Int = 100

    override func viewDidLoad() {
        super.viewDidLoad()
        self.paramTotal(total1: &total)
    }

    func paramTotal(total1 :inout Int) {
        total1 = 111
        print("Total1 ==> \(total1)")
        print("Total ==> \(total)")
    }
}
0
user3263340

Fondamentalement, il est utile lorsque vous voulez jouer avec des adresses de variable très utiles dans les algorithmes de structure de données.

0
JeeVan TiWari

Si vous travaillez avec des classes, alors, comme vous le dites, vous pouvez modifier la classe car le paramètre est une référence à la classe. Mais cela ne fonctionnera pas si votre paramètre est un type valeur ( https://docs.Swift.org/Swift-book/LanguageGuide/Functions.html - Section des paramètres In-Out)

Voici un bon exemple d’utilisation d’inout (définition des mathématiques pour les points CGPoints):

func + (left: CGPoint, right: CGPoint) -> CGPoint {
  return CGPoint(x: left.x + right.x, y: left.y + right.y)
}

func += (left: inout CGPoint, right: CGPoint) {
  left = left + right
}
0
abanet