Your code prints the memory location of the kid1
variable, and that does not change if you assign a new value to the variable.
If Kid
is a reference type (class) then you can use ObjectIdentifier
to get a unique identifier for the class instance that the variable references:
var kid1 = Kid(name: "A")
var kid2 = Kid(name: "B")
print(ObjectIdentifier(kid1)) // ObjectIdentifier(0x0000000100b06220)
print(ObjectIdentifier(kid2)) // ObjectIdentifier(0x0000000100b06250)
kid1 = kid2
print(ObjectIdentifier(kid1)) // ObjectIdentifier(0x0000000100b06250)
The object identifier happens to be the address of the pointed-to instance, but that is an undocumented implementation detail. If you need to convert an object reference to a real pointer then you can do (compare How to cast self to UnsafeMutablePointer<Void> type in swift )
print(Unmanaged.passUnretained(kid1).toOpaque())
Why kid1
is pointing to the same MemoryAddress
each time?
In general, a class is a reference type. Which means, all instances of a class will share a single copy of data.
Ie, it's like a mutable data, if you change a data at any once instance of class, then it will affect that change to all its dependent instances.
It mainly deals with the memory addresses.
I think you have declared your class like below:
class Kid {
var name: String?
init(name:String) {
self.name = name
}
}
then for
var kid1 = Kid(name: "A")
: For kid1
instance it will assign some memory address, say <Kid: 0x60400024b400>
var kid2 = Kid(name: "B")
: For kid2
instance it will assign some other memory address, say <Kid: 0x60400024b760>
when you do kid1 =kid2
: kid1
memory address will get changed to kid2
memory address. So, kid1
and kid2
will pointing to same memory address.
kid1.name = "C"
: now if a change kid1.name
,..it will reflect to kid2.name
value also,because both are pointing to same memory address.
Therefore you get:
kid1.name == "C"
kid2.name == "C"
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.