- 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?
1.什么时候抽取分类,更加提高开发的效率
学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
什么是分类
一、本章笔记
已知一个字符串,要求找出字符串 所有的阿拉伯数字
@"dasdhaksdh1231jkdasljd190jdlajd1jals940"
1.计数器思想,定义一个变量保存结果
2.遍历字符串,取出字符串中所有的字符
一、思路
计算字符串里面 阿拉伯数字的总数 这个方法可能经常使用 我们可以 封装成函数、方法、抽取分类
1.封装成函数、方法 只能在本文件访问 不能满足我们一些其他的需求 比如在其他文件访问的时候 那么还是要复制之前的函数,扩展性不是很好
2.抽取一个 字符串的分类 提供一个对象方法、类方法 给外部访问 。然后直接返回总个数即可
二、code
main.m
#pragma mark 11-分类练习
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "NSString+LYH.h"
#pragma mark - main函数
/*
int countWithStr(NSString *str)
{
int count = 0;
for (int i = 0; i < str.length; ++i) {
unichar c = [str characterAtIndex:i];
// NSLog(@"%c",c);
// 判断是不是数组
if (c>= '0' && c <= '9') {
count ++;
}
}
// NSLog(@"count = %i",count);
return count;
}
*/
int main(int argc, const char * argv[])
{
/*
已知一个字符串,要求找出字符串 所有的阿拉伯数字
@"dasdhaksdh1231jkdasljd190jdlajd1jals940"
1.计数器思想,定义一个变量保存结果
2.遍历字符串,取出字符串中所有的字符
*/
NSString *str = @"lyh165lys168l22y33h4s222";
/*
- (unichar)characterAtIndex:(NSUInteger)index;
typedef unsigned short unichar;
unsigned (无符号) 输出 %u . 取值 整数 和 零
short; 输出 %hi hd // 2个字节 == -2(15)~2(15)-1
*/
// unichar c = [str characterAtIndex:0]; // 通过一个字符串 去查找出指定的索引 返回对应索引的字符
// NSLog(@"%c",c);
/*
int count = 0;
for (int i = 0; i < str.length; ++i) {
unichar c = [str characterAtIndex:i];
// NSLog(@"%c",c);
// 判断是不是数组
if (c>= '0' && c <= '9') {
count ++;
}
}
NSLog(@"count = %i",count);
*/
// int count = countWithStr(str);
// int count = [NSString countWithStr:str];
int count2 = [NSString lyh_countWithStr:str];
int count = [str lyh_count];
NSLog(@"count = %i,count2 = %i",count,count2);
return 0;
}
Person
>>>.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
- (void)test;
@end
>>>.m
#import "Person.h"
#import "NSString+LYH.h"
@implementation Person
- (void)test
{
NSString *str = @"dasd3khdahk132dhakh3312hdakjdh1djahs2";
int count = [NSString lyh_countWithStr:str];
NSLog(@"count = %i",count);
}
@end
NSString+LYH
>>>.h
#import <Foundation/Foundation.h>
/*
什么是分类(Category):
Category 有很多中翻译 : 分类、类别、类目(一般叫分类)
在不修改原有类的情况下,为这个类扩充一些方法
分类的注意点:
1.分类是用于给原有类添加方法的,只能添加方法,不能添加属性(成员变量)
2.分类中的 @property, 只会生成 setter / getter方法的声明,不会生成实现 以及 私有的成员变量
3.可以在分类中 访问原有类中 .h 的属性
4.如果多个分类中 都有原有类中 同名的方法, 那么调用该方法的时候执行谁 由编译器决定
会执行 最后一个 参与编译的分类中的方法
注意 : 如果分类中 有 和 原有类同名的方法,会调用分类中的方法
也就是说会忽略原有类的方法
注意 : 在开发中 尽量不要这样写
分类and类之间的方法调用顺序:
1.分类
2.本类
3.父类
分类的好处:
分类的好处: 比如你想使用一个字符串的方法,但是系统的NSString没有提供这些方法.
这时候 我们需要自己处理,然后添加到分类里面,这样我下一个项目也有可能使用到之前的方法.这样就不需要重新写一遍了
直接引用我之前写过的分类即可
*/
@interface NSString (LYH)
#pragma mark Class Method
/**
计算一个字符串里面含有多少个阿拉伯数字的总数
>例如:lyh165 返回结果:3
@return 阿拉伯数字的总数
*/
- (int)lyh_count;
+ (int)lyh_countWithStr:(NSString *)str;
@end
>>>.m
#import "NSString+LYH.h"
@implementation NSString (LYH)
#pragma mark Class Method
- (int)lyh_count
{
int count = 0;
for (int i = 0; i < self.length; ++i) {
unichar c = [self characterAtIndex:i];
// NSLog(@"%c",c); 打印每次遍历出来的字符
// 判断是不是1-9的数字
if (c>= '0' && c <= '9') {
count ++;
}
}
// NSLog(@"count = %i",count); // 打印个数
return count;
}
+ (int)lyh_countWithStr:(NSString *)str
{
int count = [str lyh_count];
return count;
}
@end