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’
但它不起作用.
问题是:我做错了什么?
解决方法
如果在导入当前正在运行的应用程序的新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,表达式 – .该别名对于在将真实表达式输入命令时关闭选项解析非常方便…