用OC写一个可以分字母组,的电话薄,并实现功能

首先要创建 AddressContact 类,

#import <Foundation/Foundation.h>   //---------AddressContact的.h文件
@interface AddressContact : NSObject
{
    NSString *_name;
    NSString *_sex;
    NSString *_phone;
    NSString *_address;
    NSString *_groupName;
    NSInteger _age;
}
- (instancetype)initWithName:(NSString *)name phone:(NSString *)phone;
- (instancetype)initWithName:(NSString *)name phone:(NSString *)phone sex:(NSString *)sex address:(NSString *)address groupName:(NSString *)groupName age:(NSInteger)age;
- (NSString *)groupName;
- (NSString *)phone;
- (NSString *)sex;
- (NSString *)name;
- (NSInteger)age;
//输出信息,
- (void)displayContactInfo;
//比较年龄
- (NSComparisonResult)compareAge:(AddressContact *)addressContact;
//比较姓名
- (NSComparisonResult)compareName:(AddressContact *)addressContact;
@end

----

#import "AddressContact.h"     //------AddressContact的.m文件
@implementation AddressContact
- (instancetype)initWithName:(NSString *)name phone:(NSString *)phone
{
    return [self initWithName:name phone:phone sex:nil address:nil groupName:nil age:0];
}
- (instancetype)initWithName:(NSString *)name phone:(NSString *)phone sex:(NSString *)sex address:(NSString *)address groupName:(NSString *)groupName age:(NSInteger)age
{
    self = [super init];
    if (self) {
        _name = name;
        _phone = phone;
        _sex = sex;
        _address = address;
        _groupName = groupName;
        _age = age;
    }
    return self;
}
- (NSString *)groupName
{
    return _groupName;
}
- (NSString *)phone
{
    return  _phone;
}
- (NSString *)sex
{
    return _sex;
}
- (NSString *)name
{
    return _name;
}
- (NSInteger)age
{
    return _age;
}
- (void)displayContactInfo
{
    NSLog(@"%@,%ld",_name,_age);
}
//比较年龄
- (NSComparisonResult)compareAge:(AddressContact *)addressContact
{
    NSInteger myAge = [self age];
    NSInteger otherAge = [addressContact age];
    if (myAge > otherAge) {
        return NSOrderedAscending;
    }else if(myAge < otherAge){
        return NSOrderedDescending;
    }else{
        return NSOrderedSame;
    }
}
//比较姓名
- (NSComparisonResult)compareName:(AddressContact *)addressContact{
    NSString *myName = [self name];
    NSString *otherName = [addressContact name];
    NSComparisonResult result = [myName compare:otherName];
    if (result == NSOrderedAscending) {
        return  NSOrderedDescending;
    }else if(result == NSOrderedDescending){
        return  NSOrderedAscending;
    }else {
        return NSOrderedSame;
    }
}
@end

-----------

然后在创建ContactManager类。。。。。。。。。。。

#import <Foundation/Foundation.h>   // ------ContactManager的.h文件
#import "AddressContact.h"
@interface ContactManager : NSObject
{
    NSMutableDictionary *_contactDict;
}
//添加联系人
- (void)addVContact:(AddressContact *)contact;
//获取某个分组下的联系人。
- (NSArray *)allContactsForGroupName:(NSString *)groupName;
//根据电话号码搜索联系人
- (AddressContact *)contactForPhoneNumber:(NSString *)phoneNumer;
//获取所有女性联系人,按照年龄降序
- (NSArray *)contactForSex:(NSString *)sex;
//根据姓名删除某个联系人
- (void)removeContactForName:(NSString *)name;
//删除某个分组的全部联系人
-(void)removeContactForGroupName:(NSString *)groupName;
@end

------

#import "ContactManager.h"  //--------ContactManager的.m文件
@implementation ContactManager
//添加联系人
- (void)addVContact:(AddressContact *)contact
{
    NSString *groupName = [contact groupName];
    NSMutableArray *array = [_contactDict objectForKey:groupName];
    if (array == nil) {
        array = [NSMutableArray arrayWithCapacity:0];
        [array addObject:contact];
        [_contactDict setObject:array forKey:groupName];
    }else{
        [array addObject: contact];
    }
}
//获取某个分组下的联系人。
- (NSArray *)allContactsForGroupName:(NSString *)groupName
{
    NSMutableArray *array = [_contactDict objectForKey:groupName];
    [array sortUsingSelector:@selector(compareName:)];
    return array;
}
//根据电话号码搜索联系人
- (AddressContact *)contactForPhoneNumber:(NSString *)phoneNumer
{
    for (NSString *key in _contactDict) {
        NSMutableArray *array = [_contactDict objectForKey:key];
        for (AddressContact *contact in array) {
            if ([[contact phone] isEqualToString:phoneNumer]) {
                return contact;
            }
        }
    }
    return nil;
}
//获取所有女性联系人,按照年龄降序
- (NSArray *)contactForSex:(NSString *)sex
{
    NSMutableArray *sexArray = [NSMutableArray arrayWithCapacity:0];
    for (NSString *key in _contactDict) {
        NSMutableArray *array = [_contactDict objectForKey:key];
        for (AddressContact *contact in array) {
            if ([[contact sex] isEqualToString:sex]) {
                [sexArray addObject:contact];
            }
        }
    }
    [sexArray sortedArrayUsingSelector:@selector(compareAge:)];
    return sexArray;
}
//根据姓名删除某个联系人
- (void)removeContactForName:(NSString *)name
{
    for (NSString *key in _contactDict) {
        NSMutableArray *array = [_contactDict objectForKey:key];
        for (AddressContact *contact in array) {
            if ([[contact name] isEqualToString:name]) {
                [array removeObject:contact];
            }
        }
    }
}
//删除某个分组的全部联系人
-(void)removeContactForGroupName:(NSString *)groupName
{
    [_contactDict removeObjectForKey:groupName];
}
@end

用OC写一个可以分字母组,的电话薄,并实现功能,布布扣,bubuko.com

时间: 2024-12-19 14:39:38

用OC写一个可以分字母组,的电话薄,并实现功能的相关文章

写一个system.data.entity的simpledatarepo,实现crudq这些功能,不需要引入entityframework,直接可以使用,用到objectset

note:you can delete reference of entityframework when using this classes.it`s just a simple repohelper.the code below can also include a getpagedlist method when paging. have fun,it`s simple,just create edmx file from database.all one sentence.but wh

手动的写一个structs

为了更好的学习框架的运行机制,这里开始学习框架之前,介绍一个简单的自定义的框架. 需求: 登录:id:aaa,pwd:888登录成功之后,跳转到,index.jsp页面并显示,欢迎你,aaa 注册,页面,输入用户名密码,点击注册.注册成功之后,将会跳转到登录界面. 重在了解前后的这个逻辑,所以把后天是写死的. entity层 就一个User package cn.itcast.entity; public class User { private String name; private Str

JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数

第二题 已知有十六支男子足球队参加2008 北京奥运会.写一个程序,把这16 支球队随机分为4 个组.采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚.日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利 package Test03; import java.util.ArrayList; import java.util.List; import java.util.Random; public class

JAVA用标准库自己写一个字符串翻转方法,翻转字符串中字母非单词

例如输入:I love programming 输出:I evol gnimmargorp 算法思路就是:根据空格提取每一个单词,存放在一个buffer里进行翻转处理,再添加到新的字符串.最后新的字符串就完成整个方法过程. public class ReserveString { public String reserve(String sentence){ String backS = new String(); StringBuffer temp = new StringBuffer();

js写一个通讯录

模拟通讯录列表功能 我们手机上面的通讯录列表里面都有根据右侧的字母跳滚动到该字母的第一个名单地方. 于是我把这个功能拆分成两个功能区思考: 第一个是如何把这些名字的的汉字首字母提取出来,并且把相同字母的汉字归类,最后显示成列表. 第二是右侧字母导航,它需要一直固定在右侧,并且我按一个字母,屏幕最中间会弹出一个字母方框,代表我选中了这个字母. 我首先去实现第一个问题,如何提取名字中第一个汉字的首字母? 我去尝试过许多种方法,其中尝试过使用localeCompare(),我也成功的排序了,但是我发现

python: 怎样写一个函数把名字大写并变成下面这样——字典与三引号

例题:python: 怎样写一个函数把名字大写并变成下面这样? 字典+列表:将每个字母以列表形式存在字典里,分六次打印输出: dic = { } dic['C']=[ ' CCCC ', ' C C', 'C ', 'C ', ' C C', ' CCCC ' ] dic['A']=[ ' A ', ' A A ', ' A A ', ' AAAAAAA ', ' A A ', 'A A' ] dic['T']=[ 'TTTTTTT', ' T ', ' T ', ' T ', ' T ', '

假期跟我一起写一个点对点VPN-SimpleVPN详解

自从上周写了几篇关于BadVPN的文章后,收到很多的邮件前来询问细节.其中最多的不外乎两类,一类是询问怎么使用的,另一类则是要求我写几篇源码分析.先来一个一个说. 1.关于BadVPN的使用问题 和OpenVPN相反,BadVPN几乎没有除了配置隧道之外的任何东西,这些被排除了内容中最重要的应该就是路由了.OpenVPN中就有关于路由的很多配置,还可以从服务端往客户端推送路由,这简直太方便了,但同时也增加了配置的复杂性.BadVPN我认为是比较好的方式,它本身没有关于路由的任何配置,只要你把隧道

学了编译原理能否用 Java 写一个编译器或解释器?

16 个回答 默认排序? RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和解释器.其实用什么语言来实现编译器并不是最重要的部分(虽然Java也不是实现编译器最方便的语言),最初用啥语言都可以. 我在大学的时候,我们的软件工程和计算机科学的编译原理课的作业好像都是可以用Java来写的.反正我印象中我给这两门课写的作业都是用的Java. ===================

自己写一个java.lang.reflect.Proxy代理的实现

前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口.代理内容,生成代理. 抛砖引玉吧,个人觉得自己写一些JDK里面的那些类挺好的,写一遍和看一遍真的是两个不同的概念,写一遍既加深了对于这些类的理解.提升了自己的写代码水平,也可以在写完之后对比一下自己的实现有哪些写得不好