快速解析 Objective-C 中的 Phone 个联系人对象
Quickly Parse Phone Numbers of Contact Object in Objective-C
我想知道是否有比一个一个检查并确定联系人中的哪些 phone 号码更有效的方法。也许有字典或数组方法,我只是模模糊糊地意识到它们适用于处理不同联系人的 phone 号码的不同集合。
联系人对象有 phone 号码和很多种类的字符串,移动、办公室、家庭、传真、主要、免费等
我使用的愚蠢方法如下:
NSString *office = myContact.officetel;
NSString *home = myContact.hometel;
NSString *mobile - myContact.mobiletel;
NSMutableArray *phonenums = [@[] mutableCopy];
if (office.length>=1) {
[phonenums addObject: office];
etc.
}
当我组装好这个数组后,我可以计算它的成员,看看是否有一个或多个等等。然而,这似乎是一种乏味且低效的方法。
我的目标是能够快速识别是否只有一个 phone 号码,如果有的话,五分之三,向用户提供这些可能性。
只是想知道是否有比上述方法更强大、更有效的方法。
很简单。这是如何完成的(伪代码).
NSArray numbers = @[
myContact.officetel,
myContact.hometel,
myContact.mobiletel
];
NSMutableArray *phonenums = [NSMutableArray new];
for(NSString *number in phonenums) {
if(number.length){
[phonenums addObject: number];
}
}
它甚至可以更短,但可读性较差:
NSMutableArray *phonenums = [NSMutableArray new];
for(NSString *number in @[myContact.officetel, myContact.hometel, myContact.mobiletel]) {
if(number.length){
[phonenums addObject: number];
}
}
更新上面的代码:使用数组文字(语法糖)将对象预填充到 NSArray 中,即使用 @[a, b, c] 可能不安全,如果这些元素中的任何一个都可能为零。因此,在这种情况下,您必须确保 Contact class return 上每个数字属性的 getter 为空字符串(如果数字为 nil)。
为了在评论中解决您的请求,您可以在联系人 class 上添加一个名为 availableNumbers
的函数,这将 return 一个包含键和数字的字典。键是号码的名称,例如 office,值是号码本身:
将此添加到您的 Contact.m
class(或任何您称之为的名称)
-(NSDictionary*)availableNumbers
{
NSDictionary *keyedNumbers = [[NSMutableDictionary alloc] init];
if(self.officetel.length) {
[keyedNumbers setObject: self.officetel forKey: @"officetel"];
}
if(self.hometel.length) {
[keyedNumbers setObject: self.hometelforKey: @"hometel"];
}
if(self.mobiletel.length) {
[keyedNumbers setObject: self.mobiletelforKey: @"mobiletel"];
}
return keyedNumbers ;
}
记得在你的.h文件中添加-(NSDictionary*)availableNumbers
这样方法就是public
我想知道是否有比一个一个检查并确定联系人中的哪些 phone 号码更有效的方法。也许有字典或数组方法,我只是模模糊糊地意识到它们适用于处理不同联系人的 phone 号码的不同集合。
联系人对象有 phone 号码和很多种类的字符串,移动、办公室、家庭、传真、主要、免费等
我使用的愚蠢方法如下:
NSString *office = myContact.officetel;
NSString *home = myContact.hometel;
NSString *mobile - myContact.mobiletel;
NSMutableArray *phonenums = [@[] mutableCopy];
if (office.length>=1) {
[phonenums addObject: office];
etc.
}
当我组装好这个数组后,我可以计算它的成员,看看是否有一个或多个等等。然而,这似乎是一种乏味且低效的方法。
我的目标是能够快速识别是否只有一个 phone 号码,如果有的话,五分之三,向用户提供这些可能性。
只是想知道是否有比上述方法更强大、更有效的方法。
很简单。这是如何完成的(伪代码).
NSArray numbers = @[
myContact.officetel,
myContact.hometel,
myContact.mobiletel
];
NSMutableArray *phonenums = [NSMutableArray new];
for(NSString *number in phonenums) {
if(number.length){
[phonenums addObject: number];
}
}
它甚至可以更短,但可读性较差:
NSMutableArray *phonenums = [NSMutableArray new];
for(NSString *number in @[myContact.officetel, myContact.hometel, myContact.mobiletel]) {
if(number.length){
[phonenums addObject: number];
}
}
更新上面的代码:使用数组文字(语法糖)将对象预填充到 NSArray 中,即使用 @[a, b, c] 可能不安全,如果这些元素中的任何一个都可能为零。因此,在这种情况下,您必须确保 Contact class return 上每个数字属性的 getter 为空字符串(如果数字为 nil)。
为了在评论中解决您的请求,您可以在联系人 class 上添加一个名为 availableNumbers
的函数,这将 return 一个包含键和数字的字典。键是号码的名称,例如 office,值是号码本身:
将此添加到您的 Contact.m
class(或任何您称之为的名称)
-(NSDictionary*)availableNumbers
{
NSDictionary *keyedNumbers = [[NSMutableDictionary alloc] init];
if(self.officetel.length) {
[keyedNumbers setObject: self.officetel forKey: @"officetel"];
}
if(self.hometel.length) {
[keyedNumbers setObject: self.hometelforKey: @"hometel"];
}
if(self.mobiletel.length) {
[keyedNumbers setObject: self.mobiletelforKey: @"mobiletel"];
}
return keyedNumbers ;
}
记得在你的.h文件中添加-(NSDictionary*)availableNumbers
这样方法就是public