swift - Xcode 10.1 调试器 - 如何在 Xcode 的调试器中查看整个对象集合?
问题描述
我试图在调试时轻松查看我的对象集合。问题是当我输入 po gameBoardSquaresCollection 时,我得到一个内存地址列表,如下所示:
我想查看整个对象数组而不是它们的内存地址。gameBoardSquaresCollection 是 Square 类型,它包含一个名为 isTaken 的属性。目前我必须输入 po gameBoardSquaresCollection[0].isTaken 才能看到我的游戏板的一个值。您可以想象,当我每次调试时都必须为我的 gameBoardSquaresCollection 中的所有 108 个方格键入此内容时,这将变得多么乏味。有没有更简单的方法可以从调试器界面或允许我从输出终端执行此操作的命令执行此操作?
解决方案
每次使用po
类型时,您看到的是它的调试描述。
在这种情况下:
当你这样做时,po gameBoardSquaresCollection
你会看到gameBoardSquaresCollection
数组的调试描述。在 Swift 中,数组调试描述会打印出数组包含的所有对象的描述。
由于您的数组包含SquareView
似乎是 的子类的对象UIView
,因此您会看到 s 的默认调试描述(它对 的参数UIView
一无所知)。isTaken
SquareView
幸运的是,Swift 允许您通过让它们符合CustomDebugStringConvertible
协议来为您的类型返回自定义调试描述。
SquareView
已经符合协议(因为它是 的子类UIView
),因此如果您将以下覆盖添加到您的SquareView
类型(如果您愿意,可以省略扩展名),您将能够添加该isTaken
属性(或任何其他信息)问题)到调试输出po
:
extension SquareView {
override var debugDescription: String {
return super.debugDescription + "; isTaken = \(isTaken)"
}
}
推荐阅读
- typescript - 类的类型是否可能等于接口?
- go - 如何理解这个 go 闭包中的返回值?
- flutter - 如何在颤动的回调中捕获错误?
- reactjs - 意外的额外分号
- javascript - Javascript从购物车中删除选定的项目
- c++ - 我是否应该仅将构造函数用于 C++ 中的变量初始化?
- r - 在R中合并两个具有不同行的数据框
- fork - 我想在这行代码中使用 posix_spawn insted fork 或 execve 请帮助我
- amazon-web-services - CloudFormation 错误地报告 CloudFront 标签中的偏差
- javascript - 如何在不触发另一个函数的情况下将值从一个函数传递到另一个函数?