I have a Class defined in C++, I want to pass the instance of class from C++ to Swift as a reference type. By default swift maps C++ classes as value types but we can change this behavior by using SWIFT_IMMORTAL_REFERENCE annotation mentioned here. The example mentioned here is of Singelton class but I have a usecase where i require more than one instance.
Cpp Class Skeleton.
class Cpp {
public:
void Print () noexcept;
void SetValue (int pValue) noexcept;
// Method which is Invoked by Swift.
static Cpp& ReturnObj () noexcept;
private:
int vValue;
} SWIFT_IMMORTAL_REFERENCE;
Definition of Return Obj
Cpp&
Cpp::ReturnObj () noexcept {
static Cpp obj;
return obj;
}
Swift Co
var obj : Cpp = Cpp.ReturnObj()
withUnsafeBytes(of: &obj) {(pointer : UnsafeRawBufferPointer) in
print (pointer)
print (pointer.baseAddress!)
}
Output
Address Printed by C++ 0x100008000
Address Printed by Swift 0x00007ff7bfeff108
So from the above observation copy is passed.
How to do pass by reference then?