2016-06-24 4 views
-1

Что означает этот следующий код, Я знаю, что это должно избегать ввода символов, отличных от чисел, в TextField. Но что на самом деле происходит за этой функцией rangeOfCharacterFromSet. Что он вернет.Что происходит, когда вызывается rangeOfCharacterFromSet?

if ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound) 
     return NO; 

В документации говорится

находит и возвращает диапазон в приемнике первого символа из заданного набора символов. Диапазон в приемнике первого символа , найденный из aSet. Возвращает диапазон {NSNotFound, 0}, если ни один из персонажей Асет не найдены

Я даже не могу понять, что приемник А почему NSNotFound используется здесь. А что это aОтключить режим

Пожалуйста, объясните мне, с какой, например, для лучшего понимания (как то, что будет происходить, когда я нажимаю символ, кроме цифр)

ответ

1
- (void)test { 
NSString *str = @"input content"; 
NSCharacterSet *characterSet = [NSCharacterSet decimalDigitCharacterSet]; 
NSRange range = [str rangeOfCharacterFromSet:characterSet]; 
NSLog(@"location:%ld, length:%ld", range.location, range.length); 
// range.location is 9223372036854775807, in fact it is a NSNotFound which means not exists, range.length is 0 

str = @"input 1"; 
range = [str rangeOfCharacterFromSet:characterSet]; 
NSLog(@"location:%ld, length:%ld", range.location, range.length); 
// range.location is 6, range.length is 1 

str = @"input 123"; 
range = [str rangeOfCharacterFromSet:characterSet]; 
NSLog(@"location:%ld, length:%ld", range.location, range.length); 
// range.location is 6, range.length is 1 

str = @"123 input 123"; 
range = [str rangeOfCharacterFromSet:characterSet]; 
NSLog(@"location:%ld, length:%ld", range.location, range.length); 
// range.location is 0, range.length is 1 
} 

В тесте, ул является приемником, при вызове метода, который называют кто приемник: [приемник callTheMethod]. Abount NSCharacterSet, я думаю, что документ четко объясняет:

Объект NSCharacterSet представляет собой набор символов, совместимых с Unicode. Объекты NSString и NSScanner используют объекты NSCharacterSet для группировки символов для поиска, чтобы они могли найти любой из определенного набора символов во время поиска. Два открытых класса кластера, NSCharacterSet и NSMutableCharacterSet, объявляют программный интерфейс для статических и динамических наборов символов, соответственно.

NSRange является результатом [ул rangeOfCharacterFromSet: CharacterSet], это структура, range.location первый индекс ул который включен в CharacterSet, это тип NSInteger, когда ул не выходит из содержимое characterSet это будет очень большое целое число, а это означает NSNotFound. range.length означает, что здесь здесь всегда 1, если range.location не NSNotFound.

Надеюсь, это поможет.

0

Что делает этот код является возвращает NO, если строка содержит символ, который не является числом.

Если вы звоните [myString rangeOfCharacterFromSet:mySet], myString является receiver и mySet является aSet.

NSNotFound - это просто произвольная константа, которая указывает, что ни один из символов в наборе не найден.

1

Хорошо, позвольте мне сказать это с помощью этих слов: Если вы не знаете, что такое приемник, вы должны прочитать книгу новичка об объективе-C.

Однако ...

Приемник является объектом, вы посылаете сообщение.Так что это немного легче понять:

NSCharacterSet *digits = [NSCharacterSet decimalDigitCharacterSet]; 
[string rangeOfCharacterFromSet:digits]; 

В первой строке отправить сообщение decimalDigitCharacterSet к классу объекта NSCharacterSet. Во второй строке вы отправляете сообщение rangeOfCharacterFromSet:digits экземпляру объекта NSString.

Так давайте переводить документы, шаг 1:

находит и возвращает диапазон в строке (ранее: приемник) первый символ из заданного набора символов. Диапазон в приемнике первого символа, найденный из aSet. Возвращает диапазон {NSNotFound, 0}, если ни один из символов в Асет не найдены

Поскольку диапазон содержит две простые целые числа, вы не можете назначить nil к ним, чтобы отметить ошибку. Это будет 0. Поэтому назначается магическое число (NSNotFound). Однако, не волнуйтесь об этом, просто проверьте длину на 0.

Набор представляет собой набор символов, набор, содержащий цифры.