NSString是Objective-C中核心处理字符串的类之一(类的其中之一把)
1.注意使用@符号来创建字符串
NSString *string =@“my name is LiuJiaLiang”;
2.创建空字符串,给予赋值
NSString *string =[[NSString alloc]init];
string =@“小茗"
3.创建格式化字符串:占位符(format 使格式化,设计一个板式)
[NSString stringWithFormat:@“小茗%@岁了”,23]
字符串长度
1.通过调用NSString类的对象方法length来获取字符串长度.
2.无论字符串里面是中文还是英文,那么就按一个字符来计算.
如:
NSString *str =@“xiaoming刘"
NSlog(@“length=%i”,[str length]); //得到的结果为9
分析案例
士兵与🔫
1.首先先分析有多少个类,一个是兵的类(Person),一个是枪的类(Gun),一个是弹夹的类(Clip)
2.分析各类的属性和方法,即为成员变量和行为,兵的话有名字/身高/体重(然并卵,因为这案例不引用里面的成员变量,所以暂时不管)。行为的话有开枪,而枪的话里面有成员变量弹夹(这个声明还是有用的,因为枪开火的行为需要用到弹夹,前面为什么不要呢?你麻痹的开枪还要问人家名字,体重,身高?联系实际吧,骚年),同时枪也有开火的行为.弹夹的话里面有子弹的成员变量,还有上子弹的行为(没什么,没子弹就要上弹啊).
3.分析好了,我们就上代码.
首先是Person的.h声明文件(先声明后实现)
@interfaceSoldier :NSObject
//开火,给士兵一把枪和一个弹夹
- (void)fire:(Gun*)gun clip:(Clip*)clip;
@end
我们可以清楚看到士兵类的声明里面只有一个方法;前面的基础大家恶补一下就知道了,括号里面的都是数据类型,别问我为什么,只要你以后但凡看到括号,那括号里面只能是数据类型.(OC规定的),void代表的是空类型void;Gun *和Clip *代表着传递对象作为参数,其中这里面有一种很微妙的关系;方法通过对象形参,那么可以调用该对象上的方法.那么里面调用2个对象:Gun和Clip,有种地址传递的感觉(跟着改变,后面的值一改变,然后就跟着改变).这种也称为对象参数的连续传递.:代表着传递的参数有多少个,如果是一个,那么就写一个:,而语句中有2个,那么就写2个.最后大家方法名可能大家摸不透,因为参数太多,返回值类型的存在,根本分不清谁是方法名,其实方法名是fire: clip:,可能大家都蒙了,这么长的方法,但方法名就这么短.其实你回头看一下基础,你就知道.我这里简单说一下,方法的命名是保留冒号,忽略返回值类型,忽略传递参数的类型和形参.那么剩下的就是方法名了.最主要的是保留冒号.不要忘记.
而在Person的.m实现文件
#import"Soldier.h"
@implementationSoldier
- (void)fire:(Gun*)gun clip:(Clip*)clip
{
//判断是否有枪和弹夹
if(gun !=nil&&
clip !=nil) {
[gunshoot:clip];
}
}
@end
在实现文件中,我们要先判断是否有枪和弹夹,哥们,如果你拿的不是枪,而且弹夹也是空的话,那么请你回家吧,战场不需要你.判断的话就用if语句,如果判断是真的(这里说一下nil=空,!=非,&&=且,整个判断语句是枪不是空的且弹夹不是空的.同时我们明白如果括号里面返回的数值是1,那么条件为真,如果返回的值是0,那么是假.),就执行语句[gun shoot:clip].这里大家应该糊了,这代表什么啊,为什么在这里出现呢?其实它是为了后面做铺垫.大概意思是:给gun对象发出开火的消息,即为”竟然枪和弹药我都有了,喂,我要开火啊”.这样的话,gun对象就可以调用开火的方法.开始有种对象连续传递的感觉了.如果不理解的话,那么就当它是为了调用不是在这个Person类里面,而在Gun类里面的方法写得.
之后就是Gun类的.h文件(不要问我.h是神马,往上面看你就知道了)
#import
#import"Gun.h"
#import"Clip.h"
//多文件开发中,要使用谁就导入谁的.h文件就可以了
//注意:导入的一定是.h文件,不能是.m文件
//如果导入.m文件会报重复定义错误
@interfaceGun :NSObject
{
Clip*clip;//弹夹
}
- (void)shoot:(Clip*)c;
@end
上面已经解释了,Gun里面的成员变量是clip,为什么它要存在?而Person类里面的成员变量不写?屁!因为它在后面有用啊,方法的实现还用到它呢.简单分析一下:Clip *clip =>(Clip *是数据类型,clip是一个变量).而方法的话-(void)shoot:(Clip *)c =>声明了一个开火的方法.由于要开火是要用到弹夹的(靠,兄弟开火要用耗弹夹的吧),所以就传递一个弹夹参数进去,也是同样的格式.
现在轮到Gun类的.m文件
#import"Gun.h"
@implementationGun
- (void)shoot:(Clip*)c
{
//判断有没有弹夹
if(c !=nil) {// nil == null ==没有值
//判断有没有子弹
if(c->_bullet>0) {
c->_bullet-=1;
NSLog(@"打了一枪%i", c->_bullet);
}else
{
NSLog(@"没有子弹了");
}
}else
{
NSLog(@"没有弹夹,请换弹夹");
}
}
@end
同样方法入口进来的时候,我们先判断弹夹里面是否有子弹,子弹都没有的话,打飞机啊!同样我们运用到if来判断,大家可能看到判断条件的c->buttle就蒙了吧.这里的意思是指针变量c指向了Clip类里面的成员变量_buttle(中文意思:子弹).可能大家都会说哪里来的Clip类呢,这个其实就是间接拷贝,.h文件里我们看到它拷贝了Clip.h文件(#import“Clip”).细心的你估计能找得到.这个在最后面我会跟大家说明一下.回到正题,判断弹夹里面有没子弹.如果有子弹的话,这里就输出”打了一枪”,其中%i是格式化输出占位符,简单地来说就是子弹这个坑来填.而由于我打了一枪,那么子弹是否减少一发,不要想着无限子弹,现实生活中没可能.而里面的c->_buttle-=1(意思就是c->_buttle=c->_buttle-1,其实就是减一发子弹).再次弹夹没有子弹的话,那么就输出”没有子弹了”.而在此基础上,我们可以联想到子弹是装在弹夹上的,我们也可以判断弹夹是否为空,因为弹夹也有空的一天.如果弹夹为空的话,那么就输出”没有弹夹,请换弹夹”,如果不为空的话,在判断子弹是否为空,把判断子弹是否为空的语句嵌套在判断弹夹里面.
最后一个Clip类.h文件
#import
@interfaceClip :NSObject
{
@public
int_bullet;//子弹
}
- (void)addBullet;
@end
声明成员变量子弹这个属性,注意的是要添加@public,因为代表这个成员变量可以访问,可以给其他文件使用.因为成员变量声明中默认是@protect,是受保护属性,其他文件是不可访问和使用的.同样我们添加了增加子弹的方法.这个方法实现也很简单,后面你就知道为什么要用到成员变量_buttle了.
Clip类.m文件
#import"Clip.h"
@implementationClip
- (void)addBullet
{
//上子弹
_bullet=10;
}
@end
这个方法实现很简单,只是简单地赋值给_buttle.也就是说每次调用这个方法的话,就会让枪重新上弹,而且还是10颗子弹哦.有子弹了我们就可以乱射一通了.哈哈.
最后的main.m文件(主函数)
intmain(intargc,constchar* argv[]) {
// 1.创建士兵
Soldier*sp =[Soldiernew];
// 2.创建一把枪
Gun*gun = [Gunnew];
// 3.创建弹夹
Clip*clip = [Clipnew];
[clipaddBullet]; //子弹数量为10
// 2.让士兵开枪
//让对象作为方法的参数传递
// [sp fire:gp]; //地址
[spfire:gpclip:clip];
return0;
}
这里就简单概括一下吧,我们创建了士兵,枪,弹夹这3个对象,我们先给枪加满子弹(即为10发),然后再调用fire方法.来进行开枪的行为.实现目的,结束函数.
在各个.h文件中我们都可以有#import“XXX.h”,其实这个是引用头文件,把右边的文件拷贝到当前位置.其实简单来说就是我的女朋友就是你,那么我就可以使用你的钱,你也不会计较.哈哈.
总结:写士兵与枪的案例,其实简单地说明各个类属性和方法的运用和之间的联系,其实大家通过传递对象参数来达到一个方法嵌套另一个方法.也就是说:刚开始的是士兵要调用开火这个方法(fire),然后fire方法里又有另外一个shoot方法.大家都不要给方法里面的判断给搞糊涂了,它只是完善这个方法.让方法更加有逻辑性.所以刚开始写任何与之相关的对象,或者什么对象做了什么行为.我们不必太复杂,先从简单出发.然后再完善这个方法.这样的话,我们就不必想来想去都没思路,总是不知道从哪一步写起.其实复杂的程序都是从简单的代码实现开始做起.所以,Just do it.
Day.02.17 [转] NSString
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- char 转成 string: 方法一: NSString *tempString; char tempChar[...
- char 转成 string: 方法一: 方法二: string 转成 char: 方法一: