【问题标题】:Viewing Swift optional values in debugger在调试器中查看 Swift 可选值
【发布时间】:2015-05-24 18:25:50
【问题描述】:

为了开始编写和调试 Swift 代码,我编写了以下代码。这是在 OS X 10.10.2、Xcode 6.2 上。

let text : String? = "This is some text.\nJust for fun."

let lines : [String]? =
    text?.componentsSeparatedByCharactersInSet(
        NSCharacterSet.newlineCharacterSet())

println("\(lines)")

println ... 行中断,调试器的变量视图将Some 显示为lines 的值。在我的理解中,这表明lines 是一个可选类型,并且包含一个包裹在Some 中的值,而不是None

知道了这一点,我如何使用调试器来检查该值的实际含义?我试过了:

  • 单击小“i”按钮,在调试器控制台中产生输出“Some”。
  • 在调试器控制台中输入po linespo lines!,生成EXC_BAD_ACCESS更新:全新安装 Xcode 后,po lines 似乎没有任何效果,即没有输出。

最后一行打印出Optional(["This is some text.", "Just for fun."]),这正是我希望调试器显示的内容。

我怎样才能得到lines的解包字符串数组值,以及可选变量lines(调试器未显示其解包值)与可选变量text(其它显示的价值?每次我想调试一个可选值,或者使用 printf-debugging 时,我真的需要引入一个辅助变量吗?

【问题讨论】:

  • 这对我来说在 Xcode 6.2 上工作得很好,无论是变量视图还是 po。这是针对 OS X 应用程序的?如果你设置了一个断点来访问调试器,你在哪一行中断?
  • @gregheo 是的,这是一个 Cocoa 应用程序。断点在 println ... 行。 po 在你的机器上显示什么?
  • 会不会是 Swift 的一些惰性求值功能?我刚刚尝试跳过 println 语句,突然 lines 的值显示为 lines = 2 values

标签: debugging swift


【解决方案1】:

要打印可选值,请使用:

if let unwrappedLines = lines { // only executes if lines is not nil
    println("\(unwrappedLines)") // prints the unwrapped variable
}

【讨论】:

    【解决方案2】:

    也许我理解错了,但是您将“行”设置为可选值。因此,您需要在您的 println 语句中将其解包或不使其成为可选值。去掉“?”在你的“行”声明之后,看看这是否适合你。

    let lines : [String] =
    

    【讨论】:

    • componentsSeparatedByCharactersInSet 的结果是可选的。我当然可以在之后解开它,但我的问题是我是否可以在调试器中获得解开的值。 println 语句工作正常。
    猜你喜欢
    • 2014-11-29
    • 2019-01-31
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2016-11-02
    相关资源
    最近更新 更多