A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1、非正式协议
显然这个名词是相对于正式协议而言
1)在《Cocoa设计模式》第六章类别中讲到:【非正式协议通常定义为Foundation框架中NSObject的类别】。类别接口中制定的方法可能会或者可能不会被框架类实际地实现,而被子类重写。
2)【所谓非正式协议就是类别,即凡是给NSObject或其子类的类别】,都是非正式协议

2、应用举例
【要求给NSString类新增一个统计字符串中有多少个数字的方法】
1)新建一个非正式协议名字叫做countDigit
【NSString+countDigit.h文件内容】
  1. @interface NSString (countDigit)

  2. //统计一个字符串中数字的个数
  3. -(int)countDigit;
  4. @end
复制代码


【NSString+countDigit.m文件内容】
  1. @implementation NSString (countDigit)

  2. -(int)countDigit{
  3.     int count = 0;
  4.     char ch ;
  5.     for (int i = 0; i < self.length; i++) {
  6.         //取出字符串中对应位置字符
  7.         ch = [self characterAtIndex:i];
  8.         //如果字符在0~9之间就是数字了
  9.         if (ch >='0' && ch <= '9') {
  10.             count++;//计数+1
  11.         }
  12.     }
  13.     return count;
  14. }
  15. @end
复制代码



【NSString+countDigit.m文件内容】
  1. #import "NSString+countDigit.h"
  2. int main(int argc, const char * argv[])
  3. {

  4.     @autoreleasepool {
  5.         NSString *str = @"abad123kjkjh456asdfgs789";//共9个数字
  6.         
  7.        NSLog(@"【%@】 digit number = %d",str, [str countDigit]);    }
  8.     return 0;
  9. }
复制代码


打印结果:
2015-10-07 11:10:14.185 非正式协议[789:303] 【abad123kjkjh456asdfgs789】 digit number = 9

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马