代码之家  ›  专栏  ›  技术社区  ›  user6631314

Objective-C中联系人对象电话号码的快速解析

  •  0
  • user6631314  · 技术社区  · 7 年前

    我使用的愚蠢方法如下:

    NSString *office = myContact.officetel;
    NSString *home = myContact.hometel;
    NSString *mobile - myContact.mobiletel;
    
    NSMutableArray *phonenums = [@[] mutableCopy]; 
    if (office.length>=1) {
    [phonenums addObject: office];
    etc.
    }
    

    当我组装好这个数组后,我可以数一数它的成员,看看是否有一个或多个,以此类推。然而,这似乎是一种乏味而低效的方法。

    我的目标是能够快速确定是否只有一个电话号码,如果有,比如说,五分之三,向用户提供这些可能性。

    只是想知道是否有一个更强大,更有效的方法比上述之一。

    1 回复  |  直到 7 年前
        1
  •  1
  •   pnizzle    7 年前

    很简单。这就是如何做到的(伪代码)

    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];
        }
    }
    

    更新上述代码

    要在注释中处理您的请求,可以在名为 availableNumbers 这将返回一个带有键和数字的字典。键是数字的名称,例如office,值是数字本身:

    Contact.m (或者随便你怎么称呼它)

    -(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 ;
    }
    

    -(NSDictionary*)availableNumbers 以使该方法是公共的