Swift Class versus Structure
In Swift Just like classes play a important role , Structure do play a important role.
What could be the notable difference?
First one is Structure is pass by value and Classes are pass by reference. Below is a simple example to understand the meaning of it.
What could be the notable difference?
First one is Structure is pass by value and Classes are pass by reference. Below is a simple example to understand the meaning of it.
func getAddress(_ object: Any)->String{
var newObject = object
var address:String = String("Could Not CalculateAddress")
withUnsafePointer(to: &newObject) {
address = "\($0)"
}
return address
}
func getAddressForClass(_ object:AnyObject) -> Any {
return Unmanaged<AnyObject>.passUnretained(object).toOpaque()
}
//Structure
struct User{
var name:String
var userId:Int
}
func changeStructuredValue(_ inputStruct:User){
var newInputStruct = inputStruct
newInputStruct.name = "Rose"
print("Modifying Struct , Address Location= \(getAddress(newInputStruct))")
}
var structUser = User(name: "John", userId: 1)
print("Original Structure = \(structUser) Address Location= \(getAddress(structUser))")
changeStructuredValue(structUser)
print("Modified Structure = \(structUser) Address Location= \(getAddress(structUser))")
print("\n\n")
///Class
class Person {
var personName : String?
var personId : Int?
}
func changeClassValue(_ inputPerson: Person){
inputPerson.personName = "Eddie"
print("Modifying Class Address Location= \(getAddressForClass(inputPerson))")
}
var person = Person()
person.personName = "ED"
person.personId = 189
print("Original Class = \(person.personName) Address Location= \(getAddressForClass(person))")
changeClassValue(person)
print("Modified Class = \(person.personName) Address Location= \(getAddressForClass(person))")
-------The output of the above code would be--------------
Original Structure = User(name: "John", userId: 1) Address Location= 0x00007fff5f2af048
Modifying Struct , Address Location= 0x00007fff5f2aef58
Modified Structure = User(name: "John", userId: 1) Address Location= 0x00007fff5f2af048
Original Class = Optional("ED") Address Location= 0x0000618000072500
Modifying Class Address Location= 0x0000618000072500
Modified Class = Optional("Eddie") Address Location= 0x0000618000072500
You might have noticed , changeStructuredValue does change the value and is local to the scope. It creates a new copy for the function changeStructuredValue.
On the other side for the class the address remains the same before and after the modifying the value.
This was small example , that could help understanding this concept. Please write in your comments for any further feedback.
On the other side for the class the address remains the same before and after the modifying the value.
This was small example , that could help understanding this concept. Please write in your comments for any further feedback.
Comments
Post a Comment