目标C:NSRange或类似浮动?

问题描述 投票:4回答:4

对于某些方法,我希望它们返回一系列值(从:235,到:245)。我使用NSRange作为返回值

- (NSRange)giveMeARangeForMyParameter:(NSString *)myParameter;

只要返回值是integer范围(例如位置:235,长度:10),这就可以正常工作。

但现在我遇到了需要返回float范围的问题(例如位置:500.5,长度:0.4)。我在doc中读到NSRange是一个带有NSUIntegers的类型结构。是否可以为float范围键入另一个结构?如果是这样,有没有类似的方法来NSMakeRange(NSUInteger loc, NSUInteger len)创建那些float范围?

objective-c typedef nsrange
4个回答
8
投票

虽然您可以重用图形库中的几个“对象对象”中的一个(您可以从CGPointCGSize或它们的NS...等效物中选择),但这些对象背后的structs非常简单,以便创建自己的对象更好:

typedef struct FPRange {
    float location;
    float length;
} FPRange;

FPRange FPRangeMake(float _location, float _length) {
    FPRange res;
    res.location = _location;
    res.length = _length;
    return res;
}

1
投票

是的,您甚至可以查看NSRangeNSMakeRange的定义(在NSRange.h中,最简单的方法是在Xcode中对NSRange名称进行'命令点击')以了解如何执行此操作:

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
    NSRange r;
    r.location = loc;
    r.length = len;
    return r;
}

0
投票

如果您只想要一个包含2个浮点数的现有结构,并且不介意包含GLKit,则可以使用GLKVector2。它还具有Make功能。


0
投票

随着IOS 9 SDK的推出,Apple新增了一个与OP主题最匹配的结构:

UIFloatRange UIFloatRangeMake(CGFloat minimum, CGFloat maximum); // The range of motion for attached objects.

还有几个有用的辅助函数来比较范围:

BOOL UIFloatRangeIsInfinite(UIFloatRange range);
BOOL UIFloatRangeIsEqualToRange(UIFloatRange range, UIFloatRange otherRange);
© www.soinside.com 2019 - 2024. All rights reserved.