Можно ли сделать отрицательный лок в NSMakeRange? - PullRequest
3 голосов
/ 21 февраля 2012

Можно ли сделать отрицательный лок в NSMakeRange?

NSString *string = @"abc";
NSString *myString = [string substringWithRange:NSMakeRange(-1, 1)];

Ответы [ 2 ]

9 голосов
/ 21 февраля 2012

location и length являются целыми числами без знака :

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

, а также, NSMakeRange функция определена следующим образом:

NSRange NSMakeRange (
    NSUInteger loc,
    NSUInteger len
);
0 голосов
/ 21 февраля 2012

Да, это возможно, но на самом деле это не имеет смысла, поскольку отрицательное значение будет преобразовано в другое очень большое положительное значение.

NSUInteger loc = -1; // equal to 4294967295

1. Итак, вам нужна очень длинная строка.
2. Так, чтобы ваш пример работал

, вам нужно инвертировать отрицательное значение в огромное большое значение.
NSString *string = @"abc";
NSRange r1 = NSMakeRange(-NSUIntegerMax, 1);
NSString *myString = [string substringWithRange:r1];
NSLog(@"%@",myString);
...