在Swift中,如何检查一个NSRange是否在另一个NSRange内或与其相交?

3

如果情况1:range1是(5,10),range2是(8,0),则应返回true。 如果情况2:range1是(5,10),range2是(5,4),则应返回true。 如果情况3:如果range1是(5,10),range2是(14,20),则应返回true。 如何实现一个函数,对所有情况都返回true。 我想检查一个范围是否与另一个范围相交或完全在其中。


1
https://dev59.com/gmkw5IYBdhLWcg3wDWPL?从Objective-C适应到Swift应该不会有太大的困难。 - Larme
NSRange(8,0)是一个空的范围,它与任何东西都不重叠。 - Martin R
NSRange(8,0) 和 NSRange(30,0) 是相同的,因此您不能说它们中的一个与 (5,10) 相交。 - Gerriet
@Gerriet 不,这两个范围不相等。它们具有相同的长度但起始位置不同。但是 8,0 明显与 (5,10) 相交。 - rmaddy
1
@rmaddy:我有不同的看法。NSRange(location:8,length:0)描述了满足8 <= x <8 + 0的整数x,即一个空范围。 NSRange(location:8,length:0)NSRange(location:5,length:10)没有共同元素。 - Martin R
显示剩余3条评论
1个回答

9

在 Swift 语言中,Range 类型提供了 overlaps 方法。如果你需要使用 NSRange 类型,可以这样写:

NSIntersectionRange(range1, range2).length > 0

但是我有两个NSRange对象。 - Aashish Nagar
编辑了我的答案,包括NSRange版本。 - Gerriet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接