Swift中如何获取类实例ID及当前调用的函数?
在Swift中获取实例ID与当前调用函数的方案
我懂你想要在Swift里实现类似Objective-C中追踪实例ID和当前调用函数的需求,下面给你几个实用的方案:
获取当前调用的函数
Swift提供了内置的编译符号#function,直接使用就能获取当前函数的名称,用法和Objective-C里的__FUNCTION__类似,非常直观。
获取实例ID(区分不同实例)
Objective-C里的实例ID本质是对象的内存指针地址,在Swift里针对引用类型(类),有两种常用方式:
方式1:获取实例的内存地址(和Objective-C的实例ID格式一致)
通过String(format: "%p", self)可以直接输出实例的内存地址,和你在Objective-C里看到的格式完全相同,能直观对应原有习惯:
class TrackedClass { func doSomething() { let currentFunction = #function let instanceAddress = String(format: "%p", self) print("实例ID: \(instanceAddress) | 当前调用函数: \(currentFunction)") } } // 测试不同实例 let instance1 = TrackedClass() instance1.doSomething() // 输出示例:实例ID: 0x600001d14020 | 当前调用函数: doSomething() let instance2 = TrackedClass() instance2.doSomething() // 输出不同的实例地址
方式2:使用Swift内置的ObjectIdentifier
如果不需要和Objective-C的指针地址完全一致,只是需要一个能唯一区分实例的标识,推荐用ObjectIdentifier。它是Swift为每个引用类型实例生成的唯一标识符,在实例生命周期内绝对唯一,还能避免ARC优化导致内存地址变化的问题:
class TrackedClass { func doSomething() { let currentFunction = #function let instanceID = ObjectIdentifier(self) print("实例标识符: \(instanceID) | 当前调用函数: \(currentFunction)") } } // 测试 let instance1 = TrackedClass() instance1.doSomething() // 输出示例:实例标识符: ObjectIdentifier(0x000060000251c020) | 当前调用函数: doSomething()
注意事项
- 以上方法仅对**引用类型(类)**有效,值类型(结构体、枚举)因为是值语义,每次赋值都会复制,无法通过这种方式追踪“实例”。
- 如果需要在全局函数或者非实例方法中获取当前函数名,直接使用
#function即可,不需要self。
内容的提问来源于stack exchange,提问作者XBXSlagHeap
相关产品推荐
相关产品推荐

