Get a unique String for a given AnyObject? Get a unique String for a given AnyObject? swift swift

Get a unique String for a given AnyObject?


func hashString (obj: AnyObject) -> String {  return String(ObjectIdentifier(obj).uintValue)}let id = hashString(obj)

Swift 3.0

return String(UInt(ObjectIdentifier(obj))

Swift 4.1

return String(UInt(bitPattern: ObjectIdentifier(obj)))


How about a direct translation:

func pointerToString(objRef: NSObject) -> String {  return NSString(format: "%p", objRef)}

A more native way (in decimal, not hex):

func pointerToString(objRef: AnyObject) -> String {  return withObjectAtPlusZero(objRef, { ptr in    "\(UnsafePointer<RawByte>(ptr) - nil)"  })}

func pointerToString(objRef: AnyObject) -> String {  let ptr: COpaquePointer =    Unmanaged<AnyObject>.passUnretained(objRef).toOpaque()  return "\(UnsafePointer<RawByte>(ptr) - nil)"}

Update: Pointers stringify correctly now, so you can just do

func pointerToString(objRef: AnyObject) -> String {  let ptr: COpaquePointer =    Unmanaged<AnyObject>.passUnretained(objRef).toOpaque()  return "\(ptr)"}


Swift 4.1

String(UInt(bitPattern: ObjectIdentifier(obj)))

@aleclarson's answer update

func hashString(obj: AnyObject) -> String {    return String(UInt(bitPattern: ObjectIdentifier(obj)))}let id = hashString(obj)