gpt4 book ai didi

swift - 当我添加内循环时,For 循环没有被执行

转载 作者:行者123 更新时间:2023-11-30 13:33:06 24 4
gpt4 key购买 nike

我一定对 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 循环时,外部循环正常工作,但是当我添加内部循环时,它永远不会超过外部循环的第一次迭代。没有崩溃或任何其他事情 - 其他一切都恢复正常。

我不明白为什么会发生这种情况。我是不是太笨了,错过了一些明显的东西?

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

最佳答案

演示问题的简单示例:

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 - 当我添加内循环时,For 循环没有被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36361149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com