2013-07-25 3 views
4

Для некоторых методов я хочу, чтобы они возвращали диапазон значений (от: 235 до: 245). Я сделал это с помощью NSRange в качестве возвращаемого значенияЦель C: NSRange или подобное с поплавком?

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

Это прекрасно работает до тех пор, возвращаемое значение является integer диапазон (например, местоположение: 235, длина: 10).

Но теперь у меня есть проблема, что мне нужно вернуть диапазон float (например, местоположение: 500,5, длина: 0,4). Я прочитал в doc, что NSRange является типизированной структурой с NSUIntegers. Можно ли ввести typedef другую структуру для диапазонов float? И если да, может ли быть аналогичный метод для NSMakeRange(NSUInteger loc, NSUInteger len) для создания тех диапазонов float?

+1

Используйте NSPoint (сообщение слишком короткое). –

+0

1. Да, это возможно. 2. Да, может быть. –

+0

@RamyAlZuhouri: 'NSPoint' не является неудобным, когда он попадает на несколько платформ (iOS не знает' NSPoint') ... – FrankZp

ответ

7

Хотя вы можете повторно использовать один из нескольких «парных объектов» из графической библиотеки (вы можете выбрать из 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; 
} 
+0

Спасибо! Действительно очень просто. Что касается многоплатформенной разработки, это решение лучше, чем использование парных объектов из графической библиотеки (у Mac OS и iOS есть разные объекты ...) – FrankZp

+0

Именовать метод 'FPRangeMake' было бы лучше. Я знаю, что есть 'NSMakeRange', но это уникально между' CGPointMake', 'CGSizeMake' и аналогичными функциями. – Sulthan

+0

@Sulthan Вы правы, я уже несколько месяцев покидаю Objective C, поэтому я начал забывать о соглашениях об именах. Благодаря! – dasblinkenlight

1

Да, вы можете даже пойти и посмотреть на определения NSRange и NSMakeRangeNSRange.h, самый простой способ добраться туда, «команда нажмите» на NSRange имя в Xcode), чтобы увидеть, как это сделать:

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

Любая идея, почему это '_NSRange', а не просто' NSRange' в 'typedef struct'? –

+0

@JonathanLin только соглашение об именах, используемое Apple (для внутренних/личных вещей) – Wain

0

Если вам нужна только существующая структура с 2 поплавками, и вы не против, включая GLKit, вы можете использовать GLKVector2. Он также имеет функцию Make.

Смежные вопросы