好的,我看了上面的建议,但没有一个能够达到标准。
我遇到的问题是使用Swift中的Range原语/类/集合whatzit。
范围很酷。
并且记录错误(注意:仅仅因为“它在手册中”并不意味着它的“记录良好。”如果我能很容易找到它 - 我不能 - 然后这意味着它实际上没有很好的记录。索引和ToC 非常重要)。
我当然感谢您被引导到文档的相关部分。
现在,我真正想要的是能够处理集合,交叉点和联合等等范围。
如果做不到这一点,我决定自己动手。
我会把我的操场贴在下面。这很简单。
首先,在我现在正在编写的应用程序中,我想使用一个范围来描述一系列相关索引,包括起始索引和结束索引。
这意味着Range<Int>
。
我发现,所有Range<Int>
范围都存储为start:Int ..&lt; end:Int,即使您将它们指定为start:Int ... end:Int。
这使得获得最后一个值有点棘手。如果你要求Range.endIndex,你得到结束:Int + 1。
现在,如果您查看下面的联合示例,您将看到最终范围的endIndex为21。
我感觉我使用的范围都错了。
let rangeA:Range<Int> = 3...7
var low:Int = rangeA.startIndex // This is 3
var high:Int = rangeA.endIndex // This is 8
let rangeB:Range<Int> = 1...9
let rangeC:Range<Int> = 7...19
var lowestValue:Int = min ( rangeA.startIndex, rangeA.endIndex )
lowestValue = min ( lowestValue, min ( rangeB.startIndex, rangeB.endIndex ) )
lowestValue = min ( lowestValue, min ( rangeC.startIndex, rangeC.endIndex ) )
var highestValue = max ( rangeA.startIndex, rangeA.endIndex )
highestValue = max ( highestValue, max ( rangeB.startIndex, rangeB.endIndex ) )
highestValue = max ( highestValue, max ( rangeC.startIndex, rangeC.endIndex ) )
let unityRange:Range<Int> = lowestValue...highestValue
low = unityRange.startIndex // This is 1
high = unityRange.endIndex // This is 21