2016-06-24 2 views
-1

이 코드가 의미하는 것, 저는 이것이 TextField에 숫자가 아닌 문자를 입력하지 않기 위해서라는 것을 알고 있습니다. 그러나 실제로이 기능 뒤에 무엇이 일어나는가 rangeOfCharacterFromSet. 반환 할 내용.rangeOfCharacterFromSet을 호출하면 어떻게됩니까?

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

이 설명서는

발견을 상기 지정된 문자 세트에서 첫 번째 문자 의 수신기의 범위를 리턴한다. aSet에서 첫 문자 의 수신자 범위입니다. ASET의 문자 중 어느 것도 이

심지어 수신기 무엇인지 이해할 수 없다 왜 NSNotFound 여기에 사용되는 발견하는 경우 {NSNotFound, 0}의 범위를 돌려줍니다. 그리고

답변

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 
} 

테스트에서 str은 메소드를 호출 할 때 수신자이며 누가 수신자인지를 호출합니다. [receiver callTheMethod]. Absolute NSCharacterSet, 나는 문서가 명확하게 설명한다고 생각한다 :

NSCharacterSet 객체는 유니 코드 호환 문자 세트를 나타낸다. NSString 및 NSScanner 객체는 NSCharacterSet 객체를 사용하여 문자를 그룹화하여 검색 작업을 수행하므로 검색 중에 특정 문자 집합을 찾을 수 있습니다. 클러스터의 두 공용 클래스 인 NSCharacterSet 및 NSMutableCharacterSet은 각각 정적 및 동적 문자 집합에 대한 프로그래밍 방식 인터페이스를 선언합니다.

NSRange는 [rangeOfCharacterFromSet STR : characterSet]의 결과이며, 그것은, range.location가 characterSet에 포함 STR의 첫번째 인덱스 구조체이다, 그것은 NSInteger 타입은 STR이를 종료하지 않는 경우이며 characterSet의 내용은 매우 큰 정수가 될 것이고 NSNotFound를 의미합니다. range.length는 단어로 의미합니다. 여기서 range.location이 NSNotFound가 아니라면 항상 1입니다.

희망이 있습니다.

0

어떤 코드가 수행하는 문자열이 포함되어있는 경우가 NO을 반환 (내가 숫자 이외의 문자를 누를 때 무슨 일이 일어날 것처럼) 설정 A가

더 나은 이해를위한 몇 가지 예제를 설명해주십시오 있다는 것입니다 숫자가 아닌 문자. 당신이 [myString rangeOfCharacterFromSet:mySet]를 호출하면

, myStringreceiver하고 mySetaSet입니다.

NSNotFound은 집합의 문자가 하나도 없음을 나타내는 임의의 상수입니다.

1

글쎄, 내가이 말을 해줄 게 : 모른다면, 수신기가 무엇인지, 당신은 Objective-C에 대한 초보자의 책을 읽어야한다.

그러나

받는 사람이 개체 인 경우 메시지를 보냅니다.그래서 좀 더 쉽게 이해할 수 있도록 :

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

당신이 NSCharacterSet의 클래스 객체에 메시지 decimalDigitCharacterSet를 보내 첫 번째 줄에서. 두 번째 줄에서는 메시지 rangeOfCharacterFromSet:digits을 인스턴스 객체 NSString에 보냅니다.

그래서 우리가 문서, 1 단계 번역하자

발견하고 (이전 : 수신기) 문자열의 범위를 반환하는 지정된 문자 세트에서 첫 번째 문자의. aSet로부터 발견되는 최초의 캐릭터의 수신 측의 범위. 범위는 두 개의 일반 정수, 오류를 표시하는 그들에게 nil를 할당 할 수 없습니다를 포함하기 때문에 ASET의 문자 중 어느 것도

발견되지 않으면 {NSNotFound, 0}의 범위를 돌려줍니다. 따라서 0이됩니다. 따라서 마법 번호 (NSNotFound)가 할당됩니다. 그러나 이것에 신경 쓰지 마시고 길이를 0으로 확인하십시오.

세트는 숫자가 들어있는 문자 세트입니다.

관련 문제