Objective c 如何从lldb中的objc访问swift便利变量?
我试图在swift上下文中设置一些便利变量,并从ObjC上下文访问它Objective c 如何从lldb中的objc访问swift便利变量?,objective-c,swift,lldb,Objective C,Swift,Lldb,我试图在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)
(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
如何将一个值从swift范围(?)移动到objC范围?可以创建一个“临时上下文”,该上下文将被计算,然后作为变量传递给表达式,方法是将其放在反勾号中
因此,这将适用于swift代码中的断点:
(lldb) expression -l swift -- var $answerSwift = 42
(lldb) expression -o -l objc -- `$answerSwift`
42
当我在swift代码中有一个断点时,我尝试如下设置objc变量:
(lldb) expression -l objc -- id $label = (id)self.label
error: use of undeclared identifier 'self'
objc上下文无法访问swift变量self
,因此失败
但是,当在backticks中放置self.label
以创建临时swift上下文时,我可以将其分配给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)表达式-l objc--id$label=(id)`self.label`
(lldb)表达式-l objc-O--$label
鉴于即使在普通代码中,在ObjC中也看不到Swift globals,如果这是完全不可能的,我不会感到惊讶。(将@objc
添加到Swift表达式甚至不会解析。)Swift Int是结构而不是类。我认为您无法在编译代码中访问ObjC中的swift结构,因此您也无法在调试器中访问swift结构。对象可以工作,但如果它们不能开箱即用,我不会感到惊讶。我使用Ints是因为我希望它们能成为一个好的、简单的例子。在我的初始设置中,我试图访问对象。