我在尝试使用下标访问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