美文网首页
ios NSString与LongValue,usignedLo

ios NSString与LongValue,usignedLo

作者: taosiyu | 来源:发表于2017-09-22 15:11 被阅读82次

    这是一个关于类型转换的问题。

    很多时候我们在获取网络传输过来的数据,还有获取一个id类型的数组中元素的时候,通常会进行类型转换,只是有时候类型转换也是会出现问题的。

    例子1:

    NSString *num = @"1";
    long newNum = [num longValue];
    NSLog(@"num=: %ld", newnum);

    其实这段编译是会报错的但是,有集中情况是可以通过编译的。

    例子2:

    NSString *num2 = @"22";
    NSDictionary *dict = @{@"num2": num2};
    long newnum = [[dict objectForKey: @"num2"] longValue];
    NSLog(@"num2: %ld", num2);

    例子3:

    NSString *num3 = @"333";
    NSArray *array = @[ num3 ];
    long newnum = [array[0] longValue] ;
    NSLog(@"num3: %ld", num3);

    以上两种情况编译都不会出现问题,但是当运行时就会发生错误,因为NSString类型是没有longValue的方法的,它是NSNumber的方法,同理
    usignedLongValue,NSString中也是没有usignedLongValue方法的,所以在进行任何类型的转换之前先确定对象是不是能够调用该方法。

    respondsToSelector是很好的保护机制,在不知道数据类型的时候可以使用id 来接收然后通过判断在转换成对应的需要的类型
    比如:接着上面array

    for (int i = 0;i <array.count;i++){
    id objc = array[i];
    if ([objc respondsToSelector:@selector(LongValue)]){
    long newnum = [objc longValue] ;
    }
    }

    这样的话就不会由于调用了没有的方法而报错了。
    这里至在说明,在进行类型转换的时候需要谨慎,最好查看下手册,看看是不是支持这样的转换。

    相关文章

      网友评论

          本文标题:ios NSString与LongValue,usignedLo

          本文链接:https://www.haomeiwen.com/subject/kfrfextx.html