arrays - Swift ArraySlice 索引超出 While 循环中非空数组中 Item[0] 的范围

标签 arrays while-loop swift2

这与问题 here 有关,但答案只显示了如何使该实例工作,但没有解释哪里出了问题,所以我不确定如何使我的工作正常。 以下是有问题的代码:

let texts = ["abcdeb", "abbd", "abde", "abcd", "abcde"]
var start = 0
while start < texts.count {
    var newtexts = texts[start..<texts.count] + texts[0..<start]
    print("ding", newtexts)
    print("dong", newtexts[0])
    start += 1
}

它产生以下内容:

ding ["abcdeb", "abbd", "abde", "abcd", "abcde"]
dong abcdeb
ding ["abbd", "abde", "abcd", "abcde", "abcdeb"]
fatal error: ArraySlice index out of range

通过将我引用的索引更改为 1,我使循环成功了两次,但两次结果都是“abbd”。 2 让我获得三个成功的循环和“abde”,等等。

知道发生了什么以及如何解决它吗?

谢谢!

编辑:如果我切换到“newtexts[newtext.startIndex]”,我可以让它工作,但我不确定为什么每次我都在创建一个新数组时,startIndex 不应该总是 0 吗?

最佳答案

这行得通

let texts = ["abcdeb", "abbd", "abde", "abcd", "abcde"]

var start = 0

while start < texts.count {

 var newtexts = texts[start..<texts.count] + texts[0..<start]
 print("ding", newtexts)
 print("dong", newtexts[start]) // Or, you could use Array(newtexts)[0] instead of newtexts[start]
 start++
}

显然是 newTexts 的第一个值每次运行循环时都不能被 0 访问。 循环运行一次后,newtexts不再有可被0访问的元素,第二次运行时,不再有可被1访问的元素,以此类推。这是因为您定义 newtexts 的方式.

如果你创建一个新数组,例如,

var arrayz = texts[1...3] + texts[3...4]
arrayz[0] // Error, Bad instruction...

你在这里得到一个错误,因为这个新的“数组”包含可以从 1 开始访问的元素。 .这类似于您之前的循环中发生的情况。 “数组”newtexts (或 arrayz )您正在创建的实际上不是一个数组;它的类型是 ArraySlice<String> .这意味着它不会像普通数组那样被访问。您将能够根据您定义它的方式访问它的元素。

希望你明白。 :)

关于arrays - Swift ArraySlice 索引超出 While 循环中非空数组中 Item[0] 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34035694/

相关文章:

javascript - 如何使用 underscore .groupBy 函数根据多个属性对 json 对象数组进行分组?

perl - 嵌套的while循环似乎没有适本地保留变量

swift - 计算参数的平均值

swift2 - AVAssetWriter输入: how to get the right aspect ratio of the images within the movie?

java - 为什么 JOptionPane 会干扰我的字符串?

arrays - Google Apps脚本替换和更新范围内的单元格

c++ - while循环if和else

ios - 调用 API 时不显示 UICollectionView 单元格

iphone - 如何检测数组是否不为空?

java - while 循环在需要时未结束