五十六、基础框架(十四)创建 地址簿-4

当你  拥有  一本庞大的地址簿时,你  就不大愿意  每次要查找  某人时  都将  全部的内容  都列举出来。于是  一个比较自然的做法  就是  编写  一项措施  来查找  某个联系人的信息。我们  可以把  这项措施  称为  search:,把  我们需要查找的联系人的姓名  作为  参数。先  把  这行语句

添加  到AddressBook这类物件的接口文件AddressBook.h当中。然后  在实施文件AddressBook.m当中  具体地  描述  search:这项措施  是如何  实施的:

在search:这项措施当中  参数,也就是  需要搜索的姓名,会存储  在本地变量nameToSearch当中。search:这项措施中的快速枚举  会  依次  读取  book这个数组物件中的各个物件。每次读取出来的物件  都会存储  在currentCard当中。每次读取完  一个物件,都会执行  循环体:

在循环体中的if()里面,

这行语句  对  包含在currentCard这个物件中的物件name  采取了  caseInsensitiveCompare:这项措施  并且  参数  为  nameToSearch这个物件。currentCard这个物件中的物件name  为  当前地址卡片中的姓名,而  nameToSearch这个物件  为  需要搜索的姓名。于是  caseInsensitiveCompare:这项措施  会比较  当前地址卡片中的姓名  和  需要搜索的姓名  并且  忽略  大小写。如果  caseInsensitiveCompare:这项措施  产生出  NSOrderedSame这个结果,则  表明  当前卡片中的姓名  和  需要搜索的姓名  在忽略 大小写的情况下  一致。

如果  caseInsensitiveCompare:这项措施产生的结果  为  NSOrderedSame,就会执行

这行语句,将  当前的地址卡片  作为结果  传递回去。

如果  快速枚举  执行结束后,还是  没有找到  和需要搜索的姓名一致的地址卡片,则会执行

这行语句,将  空值  作为结果  传递回去。

接下来  我们  在程序中  测试一下  search:这项措施  是否能  正常  工作:

运行  过后,得到  这样的结果:

在这个程序当中  我  分别  搜索了  jamie baker  和  Baker两个名字,其中  第一个  找到了,并且  显示了出来,而  第二个  没有找到。

search:这项措施  还比较原始,因为  它  只能找到  准确匹配,而  不能找到  部分匹配,而且  也无法找到  多个结果。

如果  需要  search:这项措施  能找到  部分匹配的结果,那么  则  需要用到  rangeOfString:这项措施。因为  rangeOfString这项措施  如果  在其实施对象当中  找到了  参数的内容,产生的结果  就是  参数  在其实施对象中的位置;如果  没有找到,那么  产生出来的结果  就是  nil。利用  这个原理,我们  可以使  search:这项措施  找到  可以部分匹配的地址卡片。

如果   需要  search:这项措施  能找到  多个匹配的结果,则  需要  创建  一个可修改的数组物件。每找到  一个匹配的地址卡片,就将  这张卡片  添加  到数组物件当中。最后  将 包含匹配结果的数组物件  作为结果  传递回去。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值