模糊地使用“下标”

时间:2015-11-02 23:44:22

标签: swift

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

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

第二行抱怨错误Ambiguous use of "subscript",我认为这意味着Xcode不清楚变量range的类型是什么,因此它无法知道{的哪个实现{1}}使用。我尝试通过使用

明确定义subscript的类型来解决此问题
range

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

但这些都没有解决问题。有没有办法让Xcode消除对var firstInRange = (range as Range<Int>)[0]

的呼叫的歧义

1 个答案:

答案 0 :(得分:3)

您可以使用范围创建数组,然后从数组中选择一个元素。

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

来自apple docs

  

连续离散索引值的集合。

     

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

     

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

     

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

     

从上面的公理也可以得出(-99 ..&lt; 100)[0] == 0。To   防止混淆(因为有些人希望结果是-99),在a   context已知Element是一个整数类型,下标   使用Element是编译时错误:

     

//错误:找不到'下标'的重载...

     

print(范围(开始:-99,结束:100)[0])

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