Home > Software design >  Swift Pass Variable to Reference
Swift Pass Variable to Reference

Time:08-24

In C you can do

int x = 5;
int &y = x;

So both x and y point to the same place. Can I do this in Swift?

I'm programming a class with some functionality, and another class which is basically a driver.

class Driver {

    var otherClass: OtherClass
    var referenceVariable: Int = otherClass.referenceVariable // how to make a reference here
   
    ...

}

Or is there a better / more semantically correct way to do this in Swift?

CodePudding user response:

You could use a computed property for this functionality:

class Driver {

    var otherClass: OtherClass
    var referenceVariable: Int {
        get { otherClass.referenceVariable }
        set { otherClass.referenceVariable = newValue }
    }
   
    ...

}

A computed property doesn't store a value itself. It provides closures for reading and writing the property. In this case, we're operating on the value stored in the otherClass.

CodePudding user response:

Int is a struct in Swift. Structs in Swift are first citizen. Basically structs are value types. Values types usually are copied on assigning.

If you want to use reference type, just use classes.

One of the basic solution for your task is to wrap Int value in a class

final class IntWrapper {

   let value: Int

   init(value: Int) {
      self.value = value  
   }
}

Now, changing referenceVariable: IntWrapper will change all references to it

class Driver {

   var otherClass: OtherClass
   var referenceVariable: IntWrapper = otherClass.referenceVariable // how to make a reference here

  ...
}

If you want to get pointer on your class IntWrapper you can create it this way.

var pointer = UnsafePointer(&i)

But, I suppose, you aren't gonna need it

  • Related