数组为空时如何触发中断?
How to trigger a break when an Array is empty?
在我的应用程序中,当我尝试访问数组中的索引时遇到问题,该数组实际上是空的。我找不到清空它的内容,所以我想知道调试器是否可以创建一个动态断点,当我的数组为空时该断点会弹出。因此,只要有东西重置数组或拿走它的最后一个对象,我就想知道。
我试图用 "myArray.isEmpty == true" 作为条件创建一个符号断点,但它看起来不像我想要的那样工作。
这可能吗还是我在做梦?
谢谢
据我所知,这对于 Swift 和 Xcode(或我使用过的任何其他 IDE 语言)是不可能的。为了使这项工作有效,IDE 必须在程序执行的每一步不断地评估给定的表达式。
现在,如果数组是 类,您可以子类化并在覆盖 isEmpty
方法中添加断点,但由于它们已被分类,您不能。 :-(
你想要的是一个观察点,它可以让你监控内存中的变化。我还不确定如何在 Swift 数组上设置一个,但这可能是一个很好的研究起点。
一个想法是向保存数组的 属性 添加一个 didSet{}
块,在其中添加一个日志语句 - 根据数组为空的条件中断它。
正如@kendall 提到的,您可以使用didSet
来检测数组何时被清空,并在其上放置一个断点:
// a acts like a normal variable
var a: [Int] = [] {
// but whenever it’s updated, the following runs:
didSet {
if a.isEmpty {
// put a breakpoint on the next line:
println("Array is empty")
}
}
}
a.append(1)
a.append(2)
println(a.removeLast())
// will print “Array is empty” before the value is printed:
println(a.removeLast())
在我的应用程序中,当我尝试访问数组中的索引时遇到问题,该数组实际上是空的。我找不到清空它的内容,所以我想知道调试器是否可以创建一个动态断点,当我的数组为空时该断点会弹出。因此,只要有东西重置数组或拿走它的最后一个对象,我就想知道。
我试图用 "myArray.isEmpty == true" 作为条件创建一个符号断点,但它看起来不像我想要的那样工作。
这可能吗还是我在做梦?
谢谢
据我所知,这对于 Swift 和 Xcode(或我使用过的任何其他 IDE 语言)是不可能的。为了使这项工作有效,IDE 必须在程序执行的每一步不断地评估给定的表达式。
现在,如果数组是 类,您可以子类化并在覆盖 isEmpty
方法中添加断点,但由于它们已被分类,您不能。 :-(
你想要的是一个观察点,它可以让你监控内存中的变化。我还不确定如何在 Swift 数组上设置一个,但这可能是一个很好的研究起点。
一个想法是向保存数组的 属性 添加一个 didSet{}
块,在其中添加一个日志语句 - 根据数组为空的条件中断它。
正如@kendall 提到的,您可以使用didSet
来检测数组何时被清空,并在其上放置一个断点:
// a acts like a normal variable
var a: [Int] = [] {
// but whenever it’s updated, the following runs:
didSet {
if a.isEmpty {
// put a breakpoint on the next line:
println("Array is empty")
}
}
}
a.append(1)
a.append(2)
println(a.removeLast())
// will print “Array is empty” before the value is printed:
println(a.removeLast())