以下代码的含义是什么
我知道这是为了避免在TextField中键入数字以外的字符。但是这个函数rangeOfCharacterFromSet
背后的实际情况。 它将返回什么。
if ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
return NO;
在文件中说
查找并返回第一个字符的接收器中的范围 来自给定的字符集。第一个接收器的范围 从aSet中找到的字符。如果没有,则返回{NSNotFound,0}的范围 找到aSet中的字符
我甚至无法理解什么是接收器以及为什么 NSNotFound 在这里使用。什么是 aSet
请用一些例子向我解释一下,以便更好地理解(就像当我按下数字以外的字符时会发生什么)
答案 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]。 Abount NSCharacterSet,我认为该文件清楚地解释了:
NSCharacterSet对象表示一组符合Unicode的字符。 NSString和NSScanner对象使用NSCharacterSet对象将字符组合在一起以进行搜索操作,以便他们可以在搜索过程中找到任何特定的字符集。集群的两个公共类NSCharacterSet和NSMutableCharacterSet分别声明了静态和动态字符集的编程接口。
NSRange是[str rangeOfCharacterFromSet:characterSet]的结果,它是一个struct,range.location是str中第一个包含在characterSet中的索引,它是一个NSInteger类型,当str不退出的内容时characterSet它将是一个非常大的整数,它意味着NSNotFound。 range.length表示单词,在这里,除非range.location是NSNotFound,否则它总是1。
希望它有所帮助。
答案 1 :(得分:1)
好吧,让我用这句话说:如果你不知道,接收器是什么,你应该读一本关于Objective-C的初学者书。
然而,......
接收者是您发送消息的对象。所以让它更容易理解:
L[5]
在第一行中,您将消息NSCharacterSet *digits = [NSCharacterSet decimalDigitCharacterSet];
[string rangeOfCharacterFromSet:digits];
发送到decimalDigitCharacterSet
的类对象。在第二行中,您将消息NSCharacterSet
发送到rangeOfCharacterFromSet:digits
的实例对象。
让我们翻译文档,第1步:
查找并返回给定字符集中第一个字符的字符串(以前称为:receiver)中的范围。从aSet中找到的第一个字符的接收器范围。如果找不到aSet中的任何字符,则返回{NSNotFound,0}的范围
由于范围包含两个普通整数,因此您无法为它们指定NSString
来标记错误。它将为0.因此分配了幻数(nil
)。但是,请不要关心这一点,只需检查0的长度。
该集是字符集,包含数字的集合。
答案 2 :(得分:0)
如果字符串包含的字符不是数字,则代码执行的操作是返回NO
。
如果您致电[myString rangeOfCharacterFromSet:mySet]
,则myString
为receiver
而mySet
为aSet
。
NSNotFound
只是一个任意常量,表示集合中没有任何字符被找到。