我如何在Swift中获取类实例ID?

4
在Objective-C中,我会使用以下代码在控制台中识别类的实例和被调用的函数。
NSLog(@"[DMLOG - %@] %@", NSStringFromSelector(_cmd), self);

这将返回类似于下面的控制台输出,我将获得一个实例ID来跟踪对象的不同实例。
[DMLOG - prepForInput] <GridBase: 0x7fb71860a190>

我该如何在Swift中获取实例ID和调用的函数?我尝试了以下方法来获取Swift中的ID,但它仅提供类名而没有实例ID值?欢迎提出任何建议。

print("[DBG] Init: \(self)")
2个回答

12

要获取当前函数名称,请使用#function字面量。

至于实例ID,看起来你有两个选项:

  1. NSObject继承(UIKit类已经继承了它),这样类实例将具有实例ID:

  2. class MyClass: NSObject {
      override init() {
        super.init()
        print("[DBG: \(#function)]: \(self)")
      }
    }
    
  3. 如果你的类没有继承自NSObject,你仍然可以通过内存地址来识别你的实例:

  4. class Jumbo {
      init() {
        print("[DBG: \(#function)]: \(Unmanaged.passUnretained(self).toOpaque())")
      }
    }
    

谢谢Dan!这在所有类上都很好用!我感谢你的帮助。 - XBXSlagHeap

0

我刚刚使用以下内容进行了快速测试:

print("\(self) \(#function) - Count \(count)")

我得到了以下结果:
<XXXXXXX.FeedViewController: 0x7fcebdf05d40> viewWillAppear - Count 3

我会尝试一下,看看是否有帮助。


1
刚刚检查了一下,发现只有在ViewController中才会给出实例ID,而不是任何其他类。这真的很奇怪,因为如果我子类化NSObject,它就会显示,但这并不推荐,所以仍然需要找到一种方法来获取除VC或NSObject之外的任何类的ID。 - XBXSlagHeap
啊,抱歉我错过了那个。没想到要尝试那个。 - Shawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接