Swift范围的行为类似于NSRange,不包括endIndex
我遇到了一些古怪的Swift范围的行为类似于NSRange,不包括endIndex,swift,Swift,我遇到了一些古怪的Range行为,现在我开始质疑我在Swift中所知道的关于Range的一切 let range = Range<Int>(start: 0, end: 2) print(range.count) // Prints 2 我希望slice包含ABC,因为范围的结束索引是2,但是slice实际上包含AB,它确实对应于range.count==2,但由于范围的endIndex==2,应该包含C,所以不加起来 我错过了什么 我使用的是Xcode 7.2版本的Swift,而
Range
行为,现在我开始质疑我在Swift中所知道的关于Range
的一切
let range = Range<Int>(start: 0, end: 2)
print(range.count) // Prints 2
我希望slice
包含ABC
,因为范围的结束索引是2,但是slice
实际上包含AB
,它确实对应于range.count==2
,但由于范围的endIndex==2
,应该包含C
,所以不加起来
我错过了什么
我使用的是Xcode 7.2版本的Swift,而不是任何开源版本。Swift中的范围对象
Range
,默认情况下,显示为半开放间隔[start,end)
,即Swift中的范围对象Range
,默认情况下显示为半开放间隔[开始,结束)
,即开始..我在范围
文档中没有看到任何指示它是闭合-打开间隔的内容。是只有我还是(开始:t,结束:t)
语法表明它将包括结束索引?它不是很清楚,但它是在范围的语言ref中
。请参阅1分钟后编辑。@LeoDabus我认为从上面已经很清楚了,但也许我应该明确提到该赋值方法?感谢您指出这一点(但下次请在代码注释旁边使用一些额外的词,这样我就知道这是批评还是只是一些很酷的东西的提示!)@dfri是的,请继续,我想你们应该提到,他可以简化范围声明,就像这样做this@jamone这完全是人为的,特别是如果你需要使用它,因为它是在startIndex中为i做的for循环中。我在范围
文档中没有看到任何指示它是闭合-打开间隔的内容。只有我吗或者(开始:T,结束:T)
语法表明它将包括结束索引?它不是很清楚,但它是在范围的语言ref中
。请参阅1分钟后编辑。@LeoDabus我认为从上面已经很清楚了,但也许我应该明确提到该赋值方法?感谢您指出这一点(但下次请在代码注释旁边使用一些额外的词,这样我就知道这是批评还是只是一些很酷的东西的提示!)@dfri是的,请继续,我想你们应该提到,他可以简化范围声明,就像这样做this@jamone这完全是人为的,特别是如果您需要使用它,因为它是在startIndex中为i在for循环中完成的。。
let array = ["A", "B", "C", "D"]
let slice = array[range]
let range = Range<Int>(start: 0, end: 2)
print(range) // 0..<2
let range = 0..<2
print(range) // 0..<2 (naturally)
let range = 0...1
print(range) // 0..<2
for i in startIndex..<endIndex {
let x = self[i]
}