-2
votes

Quelle est la différence entre var a = 5 et var a = int (5)?

Y a-t-il une différence de valeur littérale et une valeur littérale entière entière lors de la déclaration d'une variable?


0 commentaires

4 Réponses :


3
votes
let a = 5
print(a)            // 5
print(type(of: a))  // Int
let b = Int(5)
print(b)            // 5
print(type(of: b))  // Int
You simply use the Int class constructor. In your second way it's implicit. Pick your first option.

2 commentaires

Les deux sont le même type d'objet Int?


@John Oui, c'est le but de type (de :) la fonction imprimée dans l'exemple.



6
votes
var a = 5

0 commentaires

2
votes

SWIFT utilise le type d'inférence et de littéraux entier des types SWIFT est déduit le type int , de sorte que le type de a in let a = 5 sera < Code> int . Par conséquent, passer un littéral entier à l'initialiseur de int n'a aucun autre effet, de sorte que vos deux exemples atteignent les mêmes résultats.


0 commentaires

4
votes

Avant d'optimisation, oui, celles-ci sont différentes. var a = 5 code> est immédiatement optimisé pour donner des références futures à A code> la valeur de 5. var a = int (5) code> inclut un appel de la fonction à SIGNINEINTEGER.INIT CODE>. Vous pouvez voir cela en émettant la SIL:

// main
sil @main : $@convention(c) (Int32, UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>) -> Int32 {
bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>):
  alloc_global @$S4main1xSivp                     // id: %2
  %3 = global_addr @$S4main1xSivp : $*Int         // user: %6
  %4 = integer_literal $Builtin.Int64, 5          // user: %5
  %5 = struct $Int (%4 : $Builtin.Int64)          // user: %6
  store %5 to %3 : $*Int                          // id: %6
  %7 = integer_literal $Builtin.Int32, 0          // user: %8
  %8 = struct $Int32 (%7 : $Builtin.Int32)        // user: %9
  return %8 : $Int32                              // id: %9
} // end sil function 'main'


0 commentaires