2017-12-28 7 views
0

kann jemand erklären, warum dieser Code unten wird verschiedene WerteWert zeigt unterschiedliche Ergebnisse

class ABC: UIViewController 

    { 
     var Distance : Int! 

     override func viewDidLoad() 
     { 
      super.viewDidLoad() 


      var obj_A = ABC() 
      obj_A.Distance = 10 
      var obj_B = objVR_A 
      obj_A.Distance = 30 

      print(obj_A.Distance) // 30 
      print(obj_B.Distance) // 30 

      var x = 10 
      let y = x 
      x = 30 
      print(x) //30 
      print(y) //10 
    }} 

zeigt, warum der Wert von Obj_B ist 30, während Wert von Y 10 ist

Dank.

+0

Ganzzahlen sind Werttypen und Klassen sind Referenztypen. Das ist der Grund. – ridvankucuk

Antwort

0

Dies liegt daran, dass Grundelemente wertebasierte Typen sind und Klassen referenzenbasiert sind. Eine detaillierte Erklärung finden Sie unter Apple's blog.

// Value type example 
struct S { var data: Int = -1 } 
var a = S() 
var b = a      // a is copied to b 
a.data = 42      // Changes a, not b 
println("\(a.data), \(b.data)") // prints "42, -1" 



// Reference type example 
    class C { var data: Int = -1 } 
    var x = C() 
    var y = x      // x is copied to y 
    x.data = 42      // changes the instance referred to by x (and y) 
    println("\(x.data), \(y.data)") // prints "42, 42" 
+0

Idealerweise enthält eine Antwort mindestens eine Zusammenfassung des von ihr bereitgestellten Links. Wenn der Link nicht mehr funktioniert, werden die wichtigsten Details immer noch erläutert. –

1

Von Apple-Dokumentation:

// Reference type example 
class C { var data: Int = -1 } 
var x = C() 
var y = x      // x is copied to y 
x.data = 42      // changes the instance referred to by x (and y) 
println("\(x.data), \(y.data)") // prints "42, 42" 

einen Verweis Kopieren erzeugt implizit eine gemeinsame Instanz. Nach einer Kopie beziehen sich zwei Variablen auf eine einzelne Instanz der Daten.

Verwandte Themen