You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:02:56