常用方法 - iOS

收集了常用的方法,做个记录

#pragma mark -  json转换
+(id )getObjectFromJsonString:(NSString *)jsonString
{
NSError *error = nil;
if (jsonString) {
    id rev=[NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUnicodeStringEncoding] options:NSJSONReadingMutableLeaves error:&error];
    if (error==nil) {
        return rev;
    }
    else
    {
        return nil;
    }
}
return nil;
}

+(NSString *)getJsonStringFromObject:(id)object
{
if ([NSJSONSerialization isValidJSONObject:object])
    
{
    
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object options:0 error:nil];
    
    
    
    return [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
    
}

return nil;
}

#pragma mark -  NSDate互转NSString
+(NSDate *)NSStringToDate:(NSString *)dateString
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:dateString];
return dateFromString;
}

+(NSDate *)NSStringToDate:(NSString *)dateString withFormat:(NSString *)formatestr{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formatestr];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:dateString];
return dateFromString;
}

+(NSString *)NSDateToString:(NSDate *)dateFromString withFormat:(NSString *)formatestr
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formatestr];
NSString *strDate = [dateFormatter stringFromDate:dateFromString];
return strDate;
}



#pragma mark -  判断字符串是否为空,为空的话返回 “” (一般用于保存字典时)
+(NSString *)IsNotNull:(id)string
{
NSString * str = (NSString*)string;
if ([self isBlankString:str]){
    string = @"";
}
return string;

}

//..判断字符串是否为空字符的方法
+(BOOL) isBlankString:(id)string {
NSString * str = (NSString*)string;
if ([str isEqualToString:@"(null)"]) {
    return YES;
}
if (str == nil || str == NULL) {
    return YES;
}
if ([str isKindOfClass:[NSNull class]]) {
    return YES;
}
if ([[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {
    return YES;
}
return NO;
}


#pragma mark - 使用subString去除float后面无效的0
+(NSString *)changeFloatWithString:(NSString *)stringFloat
{
const char *floatChars = [stringFloat UTF8String];
NSUInteger length = [stringFloat length];
NSUInteger zeroLength = 0;
NSInteger i = length-1;
for(; i>=0; i--)
{
    if(floatChars[i] == '0') {
        zeroLength++;
    } else {
        if(floatChars[i] == '.')
            i--;
        break;
    }
}
NSString *returnString;
if(i == -1) {
    returnString = @"0";
} else {
    returnString = [stringFloat substringToIndex:i+1];
}
return returnString;
  }

#pragma mark - 去除float后面无效的0
+(NSString *)changeFloatWithFloat:(CGFloat)floatValue

{
return [self changeFloatWithString:[NSString stringWithFormat:@"%f",floatValue]];
}

#pragma mark - 如何通过一个整型的变量来控制数值保留的小数点位数。以往我们通类似@"%.2f"来指定保留2位小数位,现在我想通过一个变量来控制保留的位数
+(NSString *)newFloat:(float)value withNumber:(int)numberOfPlace
{
NSString *formatStr = @"%0.";
formatStr = [formatStr stringByAppendingFormat:@"%df", numberOfPlace];
NSLog(@"____%@",formatStr);

formatStr = [NSString stringWithFormat:formatStr, value];
NSLog(@"____%@",formatStr);

printf("formatStr %s\n", [formatStr UTF8String]);
return formatStr;
}


#pragma mark -  手机号码验证
+(BOOL) isValidateMobile:(NSString *)mobile
{
/*
//手机号以13, 15,18开头,八个 \d 数字字符
NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
return [phoneTest evaluateWithObject:mobile];
*/

NSPredicate* phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"1[34578]([0-9]){9}"];

return [phoneTest evaluateWithObject:mobile];

}

#pragma mark -  阿里云压缩图片
+(NSURL*)UrlWithStringForImage:(NSString*)string{
NSString * str = [NSString stringWithFormat:@"%@@800w_600h_10Q.jpg",string];
NSLog(@"加载图片地址=%@",str);
return [NSURL URLWithString:str];
}

//..去掉压缩属性“@800w_600h_10Q.jpg”
+(NSString*)removeYaSuoAttribute:(NSString*)string{
NSString * str = @"";
if ([string rangeOfString:@"@"].location != NSNotFound) {
    NSArray * arry = [string componentsSeparatedByString:@"@"];
    str = arry[0];
}
return str;
}

#pragma mark - 字符串类型判断
//..判断是否为整形:
+ (BOOL)isPureInt:(NSString*)string{
NSScanner* scan = [NSScanner scannerWithString:string];
int val;
return[scan scanInt:&val] && [scan isAtEnd];
}

//判断是否为浮点形:
+ (BOOL)isPureFloat:(NSString*)string{
NSScanner* scan = [NSScanner scannerWithString:string];
float val;
return[scan scanFloat:&val] && [scan isAtEnd];
}


#pragma mark -  计算内容文本的高度方法
+ (CGFloat)HeightForText:(NSString *)text withSizeOfLabelFont:(CGFloat)font withWidthOfContent:(CGFloat)contentWidth
{
NSDictionary *dict = @{NSFontAttributeName:[UIFont systemFontOfSize:font]};
CGSize size = CGSizeMake(contentWidth, 2000);
CGRect frame = [text boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil];
return frame.size.height;
}

#pragma mark -  计算字符串长度
+ (CGFloat)WidthForString:(NSString *)text withSizeOfFont:(CGFloat)font
{
NSDictionary *dict = @{NSFontAttributeName:[UIFont systemFontOfSize:font]};
CGSize size = [text sizeWithAttributes:dict];
return size.width;
}



#pragma mark -  计算两个时间相差多少秒

+(NSInteger)getSecondsWithBeginDate:(NSString*)currentDateString  AndEndDate:(NSString*)tomDateString{

NSDate * currentDate = [XYString NSStringToDate:currentDateString withFormat:@"yyyy-MM-dd HH:mm:ss"];
NSInteger currSec = [currentDate timeIntervalSince1970];

NSDate *tomDate = [XYString NSStringToDate:tomDateString withFormat:@"yyyy-MM-dd HH:mm:ss"];
NSInteger tomSec = [tomDate timeIntervalSince1970];

NSInteger newSec = tomSec - currSec;
NSLog(@"相差秒:%ld",(long)newSec);
return newSec;
}


#pragma mark - 根据出生日期获取年龄
+ (NSInteger)ageWithDateOfBirth:(NSDate *)date;
{
// 出生日期转换 年月日
NSDateComponents *components1 = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:date];
NSInteger brithDateYear  = [components1 year];
NSInteger brithDateDay   = [components1 day];
NSInteger brithDateMonth = [components1 month];

// 获取系统当前 年月日
NSDateComponents *components2 = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
NSInteger currentDateYear  = [components2 year];
NSInteger currentDateDay   = [components2 day];
NSInteger currentDateMonth = [components2 month];

// 计算年龄
NSInteger iAge = currentDateYear - brithDateYear - 1;
if ((currentDateMonth > brithDateMonth) || (currentDateMonth == brithDateMonth && currentDateDay >= brithDateDay)) {
    iAge++;
}

return iAge;
}


#pragma mark - 根据经纬度计算两个位置之间的距离
+(double)distanceBetweenOrderBylat1:(double)lat1 lat2:(double)lat2 lng1:(double)lng1 lng2:(double)lng2{
double dd = M_PI/180;
double x1=lat1*dd,x2=lat2*dd;
double y1=lng1*dd,y2=lng2*dd;
double R = 6371004;
double distance = (2*R*asin(sqrt(2-2*cos(x1)*cos(x2)*cos(y1-y2) - 2*sin(x1)*sin(x2))/2));
//返回km
return  distance/1000;

//返回m
//return   distance;

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,071评论 25 707
  • 你时代“柔转世界” 你注意了到了吗?化妆品专柜永远设在商场的第一层;超级女声风靡全中国;电视台的黄金八...
    会转弯的风儿阅读 457评论 0 1
  • 书名:《刻意练习》如何从新手到大师原作名:PEAK: Secrets from the New Science o...
    夏小月阅读 236评论 0 0
  • 1 若和我在一起是你的青春 那么这杯茶也着实让你体会到了苦涩 若与你能遇见是我的蜕变 那么这碗酒也的确让我感受到了...
    云一莫阅读 327评论 0 3