IOS debug – get memory address

import Foundation
// Ref: https://stackoverflow.com/questions/24058906/printing-a-variable-memory-address-in-swift
// Author: nyg (profile: https://stackoverflow.com/users/5536516/nyg)
struct MemoryAddress<T>: CustomStringConvertible {
let intValue: Int
var description: String {
let length = 2 + 2 * MemoryLayout<UnsafeRawPointer>.size
return String(format: "%0\(length)p", intValue)
}
// for structures
init(of structPointer: UnsafePointer<T>) {
intValue = Int(bitPattern: structPointer)
}
}
extension MemoryAddress where T: AnyObject {
// for classes
init(of classInstance: T) {
intValue = unsafeBitCast(classInstance, to: Int.self)
// or Int(bitPattern: Unmanaged<T>.passUnretained(classInstance).toOpaque())
}
}
// Below is testing code
class MyClass {
let foo = 42
let tmp = 55
}
struct MyStruct { let foo = 3 } // using empty struct gives weird results (see comments)
var classInstance = MyClass()
let referencePointerOfClassInstance = UnsafeMutablePointer<MyClass>(&classInstance)
let t1ClassInstance = classInstance
let t2ClassInstance = MyClass()
print("classInstance address: \(MemoryAddress(of: classInstance))")
print("t1ClassInstance address: \(MemoryAddress(of: t1ClassInstance))")
print("t2ClassInstance address: \(MemoryAddress(of: t2ClassInstance))")
var structInstance = MyStruct()
let referencePointerOfStructInstance = UnsafePointer<MyStruct>(&structInstance)
var t1StructInstance = structInstance
var t2StructInstance = MyStruct()
print("structInstance address: \(MemoryAddress(of: &structInstance))")
print("t1StructInstance address: \(MemoryAddress(of: &t1StructInstance))")
print("t2StructInstance address: \(MemoryAddress(of: &t2StructInstance))")

Below using lldb commands to check memory address & value: