我在尝试使用下标访问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]
?
答案 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])