如何从lldb中的objc访问swift方便变量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从lldb中的objc访问swift方便变量?相关的知识,希望对你有一定的参考价值。

我试图在swift上下文中设置一些便利变量并从ObjC上下文中访问它。

(lldb) expression -l swift -- var $answerSwift = 42
(lldb) expression -o -l swift -- $answerSwift
42
(lldb) expression -o -l objc -- $answerSwift
error: use of undeclared identifier '$answerSwift'

另一种方式完美无缺:

(lldb) expression -l objc -- int $answerObjc = 42
(lldb) expression -o -l swift -- $answerObjc
42

如何将值从快速范围(?)移动到objC范围?

答案

可以创建一个“临时上下文”,它将被评估,然后通过将其放入反引号中作为变量传递给表达式。

所以这适用于swift代码中的断点:

(lldb) expression -l swift -- var $answerSwift = 42
(lldb) expression -o -l objc -- `$answerSwift`
42

当我在swift代码中有一个断点时,我试图像这样设置一个objc var:

(lldb) expression -l objc -- id $label = (id)self.label
error: use of undeclared identifier 'self'

objc上下文无法访问swift变量self,因此失败。

但是当把self.label放在反引号来创建临时的快速上下文时,我可以将它分配给objc变量:

(lldb) expression -l objc -- id $label = (id)`self.label`
(lldb) expression -l objc -O -- $label
<UILabel: 0x7f8030c03c40; frame = (44 44; 42 21); text = 'Label'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x6000019b35c0>>

以上是关于如何从lldb中的objc访问swift方便变量?的主要内容,如果未能解决你的问题,请参考以下文章

@objc 动态变量在 Swift 4 中是啥意思

在swift中导入swift链接的objc类

Swift 5 LLDB 错误:警告:<EXPR>:12:9:警告:变量“$__lldb_error_result”的初始化从未使用过

如何从 Swift SpriteKit 中的另一个 SKScene 访问变量

Objc 代码找不到 swift 中定义的 Bool 变量

如何从 swift 代码中获得有用的 objc 枚举打印输出?