当我添加一个内部循环时,For循环没有被执行



我一定对Swift中的流控制工作方式有一个根本的误解,因为这对我来说没有任何意义。

//objects is of type [AnyObject]?
for obj in objects!{
    let colors = obj.valueForKey("colors") as? NSMutableArray
    if colors != nil{
        for i in 0...colors!.count{
            if colors![i] as? String != nil{
                colors![i] = (colors![i] as! String).capitalizedString
            }
        }
        obj.setValue(colors, forKey: "colors")
     }
     obj.save()
 }//end for

当我删除内部for循环时,外部循环正常工作,但当我添加内部循环时,它永远不会超过外部循环的第一次迭代。没有崩溃或任何事情-其他一切都恢复正常。

我不明白为什么会发生这种事。我是不是太密集了,错过了一些显而易见的东西?

或者,我可能只需要编写一个map函数来将数组中的字符串大写,但我想了解为什么这不起作用。

演示问题的一个简单示例:

let array: NSMutableArray = ["a", "b", "c"]
for i in 0...array.count {
    print("Index: (i)")
    print("Item: (array[i])")
}

打印:

Index: 0
Item: a
Index: 1
Item: b
Index: 2
Item: c
Index: 3
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2]'

您应该使用0..<array.count而不是0...array.count,作为更好的替代方案,您应该首先将数组强制转换为Swift数组,然后使用更强大的for-in变体。

一个简单的例子:

let array: NSMutableArray = ["a", "b", "c", 10, 20]
let colors = array as [AnyObject]
let newColors = colors.filter { $0 is String }
                      .map { ($0 as! String).capitalizedString }
print(newColors)

当然,首先必须放弃可变数组的概念。

我以前没有使用过swift,但在嵌套循环方面。。你等了多久才确定外循环不会通过第一次迭代?

例如,如果在嵌套循环中循环超过1000万种颜色,则需要一段时间。

或者,是否需要增加嵌套循环中的迭代器,而它当前正作为无限循环运行?

我通过将内部for循环从更改来修复它

for i in 0...colors!.count{}

for i in 0...colors!.count - 1{}

但我不知道为什么前者会导致循环中断。即使我从内部循环中删除了所有内容,它仍然存在相同的问题。如果有人知道为什么会发生这种事,请告诉我。

相关内容

  • 没有找到相关文章

最新更新