1、非正式协议 显然这个名词是相对于正式协议而言 1)在《Cocoa设计模式》第六章类别中讲到:【非正式协议通常定义为Foundation框架中NSObject的类别】。类别接口中制定的方法可能会或者可能不会被框架类实际地实现,而被子类重写。 2)【所谓非正式协议就是类别,即凡是给NSObject或其子类的类别】,都是非正式协议
2、应用举例 【要求给NSString类新增一个统计字符串中有多少个数字的方法】 1)新建一个非正式协议名字叫做countDigit 【NSString+countDigit.h文件内容】 - @interface NSString (countDigit)
-
- //统计一个字符串中数字的个数
- -(int)countDigit;
- @end
复制代码
【NSString+countDigit.m文件内容】 - @implementation NSString (countDigit)
-
- -(int)countDigit{
- int count = 0;
- char ch ;
- for (int i = 0; i < self.length; i++) {
- //取出字符串中对应位置字符
- ch = [self characterAtIndex:i];
- //如果字符在0~9之间就是数字了
- if (ch >='0' && ch <= '9') {
- count++;//计数+1
- }
- }
- return count;
- }
- @end
复制代码
【NSString+countDigit.m文件内容】 - #import "NSString+countDigit.h"
- int main(int argc, const char * argv[])
- {
-
- @autoreleasepool {
- NSString *str = @"abad123kjkjh456asdfgs789";//共9个数字
-
- NSLog(@"【%@】 digit number = %d",str, [str countDigit]); }
- return 0;
- }
-
复制代码
打印结果: 2015-10-07 11:10:14.185 非正式协议[789:303] 【abad123kjkjh456asdfgs789】 digit number = 9
|