这是底层NSThread 的私有/不透明属性,您可以使用value(forKeyPath:) 检索它:
if let number = Thread.current.value(forKeyPath: "private.seqNum") as? Int {
...
}
您也可以得到description 的description:
let string = Thread.current.description // <NSThread: 0x600003971340>{number = 7, name = foo}
然后从中解析出来:
let regEx = try! NSRegularExpression(pattern: #"number = (\d+),"#, options: [])
if
let match = regEx.firstMatch(in: Thread.current.description, options: [], range: NSRange(string.startIndex..., in: string)),
let range = Range(match.range(at: 1), in: string)
{
let threadNumberString = String(string[range])
print(threadNumberString)
}
但是,我建议在生产代码中避免使用这两种技术。它们很脆弱,取决于私有实现细节。此外,App Store 指南禁止使用私有接口。
所以,如果这只是求知欲的问题,那也没关系。但我建议不要在实际应用程序中这样做。此外,在 GCD 的世界中,我们通常使用队列,并将我们的代码从这些线程细节中抽象出来。
见: