对于某些方法,我希望它们返回一系列值(从: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
范围?
虽然您可以重用图形库中的几个“对象对象”中的一个(您可以从CGPoint
或CGSize
或它们的NS...
等效物中选择),但这些对象背后的struct
s非常简单,以便创建自己的对象更好:
typedef struct FPRange {
float location;
float length;
} FPRange;
FPRange FPRangeMake(float _location, float _length) {
FPRange res;
res.location = _location;
res.length = _length;
return res;
}
是的,您甚至可以查看NSRange
和NSMakeRange
的定义(在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;
}
如果您只想要一个包含2个浮点数的现有结构,并且不介意包含GLKit,则可以使用GLKVector2。它还具有Make功能。
随着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);