范围恶作剧

时间:2014-08-28 13:27:29

标签: ios swift range

好的,我看了上面的建议,但没有一个能够达到标准。

我遇到的问题是使用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

0 个答案:

没有答案