Printing a variable memory address in swift

前端 未结 15 1071
天涯浪人
天涯浪人 2020-11-28 01:16

Is there anyway to simulate the [NSString stringWithFormat:@\"%p\", myVar], from Objective-C, in the new Swift language?

For example:

le         


        
15条回答
  •  庸人自扰
    2020-11-28 01:26

    This is for Swift 3.

    Like @CharlieMonroe I wanted to get the address as an integer. Specifically, I wanted the address of a Thread object for use as a thread ID in a diagnostic logging module, for situations where no thread name was available.

    Based on Charlie Monroe's code, here's what I've come up with so far. But beware, I'm very new to Swift, this may not be correct ...

      // Convert the memory address of the current Thread object into an Int for use as a thread ID
      let objPtr = Unmanaged.passUnretained(Thread.current).toOpaque()
      let onePtr = UnsafeMutableRawPointer(bitPattern: 1)!  // 1 used instead of 0 to avoid crash
      let rawAddress : Int64 = onePtr.distance(to: objPtr) + 1  // This may include some high-order bits
      let address = rawAddress % (256 * 1024 * 1024 * 1024)  // Remove high-order bits
    

    The last statement is there because without it I was getting addresses like 0x60000007DB3F. The modulo operation in the last statement converts that into 0x7DB3F.

提交回复
热议问题