"subscript"的模棱两可的使用



我在尝试使用下标访问Range的第n个元素时遇到问题。代码非常简单:

var range = 0..<9
var itemInRange = range[n] // n is some Int where 0 <= n < 9

第二行抱怨错误Ambiguous use of "subscript",我认为这意味着Xcode不清楚变量range的类型,因此无法知道要使用subscript的哪个实现。我试图通过用显式定义range的类型来解决这个问题

var range: Range<Int> = 0..<9

var firstInRange = (range as Range<Int>)[0]

但这两者都没有解决问题。有没有一种方法可以让Xcode消除对subscript的调用的歧义?

您可以创建一个具有范围的数组,然后从数组中拾取一个元素。

var range = [Int](0..<9)
var itemInRange = range[1]

来自苹果文档

连续离散索引值的集合。

与其他集合一样,包含一个元素的范围具有endIndex它是startIndex的继承者;而空范围具有startIndex==endIndex。

Axiom:对于任何范围r,r[i]==i.

因此,如果Element有一个最大值,它可以作为endIndex,但永远不能包含在Range中。

它还从上面的公理得出,(-99..<100)[0]==0。到防止混淆(因为有些人预计结果为-99)上下文,其中元素是已知的整数类型,下标Element是一个编译时错误:

//错误:找不到"subscript"的重载。。。

打印(范围(起始:-99,结束:100)[0])

https://developer.apple.com/library/prerelease/mac/documentation/Swift/Reference/Swift_Range_Structure/index.html

最新更新