ios – Xcode 6.1’Xcode调试器内置的Swift REPL可以检查和操作正在运行的应用程序’无法运行

前端之家收集整理的这篇文章主要介绍了ios – Xcode 6.1’Xcode调试器内置的Swift REPL可以检查和操作正在运行的应用程序’无法运行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于 Xcode 6.1,其中一个更新点是:

Swift REPL built into the Xcode debugger can inspect and manipulate
your running app

我创建了空项目,在viewDidLoad中设置断点,当app在断点处停止时,我在Xcode控制台中输入’repl’,然后尝试打印自己的

println(self)

但是Xcode给了我错误

error: use of unresolved identifier ‘self’

但它不起作用.

问题是:我做错了什么?

解决方法

事实证明,lldb中的Swift实际上有两个表达式求值器,repl和正则表达式命令.这两者在重要方面有所不同.

如果在导入当前正在运行的应用程序的新Swift模块文件中输入,则repl命令将评估代码作为常规swift编译器.实际上,为了更准确,每次连续调用repl都会向这样的模块添加代码,并且repl会添加一些强大的功能,例如能够重新定义Swift编译器不允许的类.因此,它对于定义全新的类,函数等非常有用.让repl使用这个全局上下文也是必要的,因为Swift中的某些定义只能在模块级别执行,而repl允许您访问所有这些功能.语言. OTOH,这意味着,根据定义,repl命令无法查看运行repl命令的上下文.

表达式命令评估代码,好像它在您当前停止的函数的上下文中运行.这很有用,因为它使您可以访问ivars和局部变量,并且实际上就像在特定上下文中的代码一样.但是执行该技巧的一个副作用是它不能像创建一个新模块那样 – 这就是repl应该模仿的.注意,你在expr中无法做的事情是相当深奥的,你可以经常在表达式命令中建立临时类等.您想使用expr来运行println(self)命令.

简而言之,如果要在调试时编写新类等,请使用repl命令,但如果要访问本地变量等,请使用expr.

注意,为了使事情稍微混乱,repl实际上是一种风味或expr.如果你查看lldb帮助的repl,它会告诉你命令是表达式-r – 的别名.有些人还使用另一个别名:print,表达式 – .该别名对于在将真实表达式输入命令时关闭选项解析非常方便…

原文链接:https://www.f2er.com/iOS/333058.html

猜你在找的iOS相关文章