Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何从lldb中的objc访问swift便利变量?_Objective C_Swift_Lldb - Fatal编程技术网

Objective c 如何从lldb中的objc访问swift便利变量?

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)

我试图在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
如何将一个值从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是因为我希望它们能成为一个好的、简单的例子。在我的初始设置中,我试图访问对象。