Xcode 6只显示文本" Some"仅作为我的Swift类对象的值

时间:2014-09-29 07:01:09

标签: ios xcode swift lldb

我试图调试为什么UIButton没有显示在用Swift编写的Keyboard扩展显示的视图中。当它在LLDB调试器(Xcode 6.0.1)中显示为

dismissButton = (UIButton!) Some

我尝试使用变量前面的小分层箭头检查它的联系人,但是当我切换它时没有显示任何内容。

我尝试用PO打印出来并获取

<UIButton: 0x7fa673e0c6f0; frame = (27 14; 183 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fa673e0b680>>

哪个看起来不完整(隐藏在哪里?)

有没有办法直接检查LLDB中Swift类对象的属性?我不能使用View Hierarchy调试器,因为&#34; Capture View Hierarchy&#34;永远不会为这个项目启用,无论我尝试哪种模拟器(iOS 8从4s到6)。

编辑:根据Enrico的建议

(lldb) frame var -d run -- self.dismissButton
(UIButton!) self.dismissButton = Some {}

我用谷歌搜索但没有找到关于什么&#34;某些&#34;意味着在调试器上下文中。想知道我是否对项目有一些配置问题。容器App也是Swift,但它只是一个模板应用程序,完全使用Xcode 6.0.1生成的默认值。

Edit2:恩里科,只需输入&#39; frame var&#39;产生详细输出,其中包含以下内容

  dismissButton = Some {
    Some = 0x00007fb90261f2e0 {
      UIKit.UIControl = {
        UIKit.UIView = {
          UIKit.UIResponder = {
            ObjectiveC.NSObject = {}
          }
        }
      }
    }
  }

它更有趣,很高兴发现有些实际意味着什么(不确定它是否是nil的特殊情况版本),但仍然需要一种方法来更深入地挖掘对象。 / p>

1 个答案:

答案 0 :(得分:3)

由于您的UIButton是一个Swift可选项(请注意名称末尾的爆炸符号),其类型不是UIButton,它是Swift.ImplicitlyUnwrappedOptional

这是一个包含两个案例的枚举

enum IOU<T> {
  case Some(T)
  case None
}

您正在看到的一些就是:枚举的情况与&#34相对应;此选项包含UIButton&#34;

不幸的是,我不认为6.0.1会比你已经得到的更远。 po-ing有效,因为它知道为你打开包装。