美文网首页iOS Developer
iOS一些常用的判断

iOS一些常用的判断

作者: 呵呵你妹521 | 来源:发表于2017-02-15 13:17 被阅读97次

    # ios常用的一些判断

    ## 根据日起计算是周几

    ```

    + (NSString*)weekdayStringFromDate:(NSDate*)inputDate

    {

    NSArray *weekdays = [NSArray arrayWithObjects: [NSNull null], @"周日", @"周一", @"周二", @"周三", @"周四", @"周五", @"周六", nil];

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];

    [calendar setTimeZone: timeZone];

    NSCalendarUnit calendarUnit = NSWeekdayCalendarUnit;

    NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:inputDate];

    return [weekdays objectAtIndex:theComponents.weekday];

    }

    ```

    ## 把时间戳转化为字符串

    ### 传个时间转化为字符串

    ```

    + (NSString *)dateStringFromNumberTimer:(NSString *)timerStr {

    //转化为Double

    double t = [timerStr doubleValue];

    //计算出距离1970的NSDate

    NSDate *date = [NSDate dateWithTimeIntervalSince1970:t];

    //转化为 时间格式化字符串

    //NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];

    NSDateFormatter *df = [[NSDateFormatter alloc] init];

    df.dateFormat = @"yyyy-MM-dd HH:mm:ss";

    //转化为 时间字符串

    return [df stringFromDate:date];

    }

    ```

    ### 计算时间差

    获得当前系统时间到指定时间的时间差字符串,传入目标时间字符串和格式

    ```

    +(NSString*)stringNowToDate:(NSString*)toDate formater:(NSString*)formatStr

    {

    NSDateFormatter *formater=[[NSDateFormatter alloc] init];

    if (formatStr) {

    [formater setDateFormat:formatStr];

    }

    else{

    [formater setDateFormat:[NSString stringWithFormat:@"yyyy-MM-dd HH:mm:ss"]];

    }

    NSDate *date=[formater dateFromString:toDate];

    return [self stringNowToDate:date];

    }

    ```

    获得到指定时间的时间差字符串,格式在此方法内返回前自己根据需要格式化

    ```

    +(NSString*)stringNowToDate:(NSDate*)toDate

    {

    //创建日期 NSCalendar对象

    NSCalendar *cal = [NSCalendar currentCalendar];

    //得到当前时间

    NSDate *today = [NSDate date];

    //用来得到具体的时差,位运算

    unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ;

    if (toDate && today) {//不为nil进行转化

    NSDateComponents *d = [cal components:unitFlags fromDate:today toDate:toDate options:0 ];

    //NSString *dateStr=[NSString stringWithFormat:@"%d年%d月%d日%d时%d分%d秒",[d year],[d month], [d day], [d hour], [d minute], [d second]];

    NSString *dateStr=[NSString stringWithFormat:@"%02ld:%02ld:%02ld",[d hour], [d minute], [d second]];

    return dateStr;

    }

    return @"";

    }

    ```

    ## 动态计算行高

    根据字符串的实际内容大小,在固定的宽度和大小的情况下,动态计算行高

    ```

    + (CGFloat)textHeightFromTextString:(NSString *)text width:(CGFloat)textWidth fontSize:(CGFloat)size{

    if ([MZLUtility getCurrentIOS] >= 7.0) {

    //iOS7之后

    /*

    第一个参数: 预设空间 宽度固定  高度预设 一个最大值

    第二个参数: 行间距 如果超出范围是否截断

    第三个参数: 属性字典 可以设置字体大小

    */

    NSDictionary *dict = @{NSFontAttributeName:[UIFont systemFontOfSize:size]};

    CGRect rect = [text boundingRectWithSize:CGSizeMake(textWidth, MAXFLOAT) options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil];

    //返回计算出的行高

    return rect.size.height;

    }else {

    //iOS7之前

    /*

    1.第一个参数  设置的字体固定大小

    2.预设 宽度和高度 宽度是固定的 高度一般写成最大值

    3.换行模式 字符换行

    */

    CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:size] constrainedToSize:CGSizeMake(textWidth, MAXFLOAT) lineBreakMode:NSLineBreakByCharWrapping];

    return textSize.height;//返回 计算出得行高

    }

    }

    ```

    ## 获取iOS的版本号

    ```

    + (double)getCurrentIOS {

    return [[[UIDevice currentDevice] systemVersion] doubleValue];

    }

    + (CGSize)getScreenSize {

    return [[UIScreen mainScreen] bounds].size;

    }

    ```

    ## 目录

    ### 找到沙盒的路径

    ```

    + (NSString *)getFullPathWithFile:(NSString *)urlName {

    //先获取 沙盒中的Library/Caches/路径

    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    NSString *myCacheDirectory = [docPath stringByAppendingPathComponent:@"MyCaches"];

    //检测MyCaches 文件夹是否存在

    if (![[NSFileManager defaultManager] fileExistsAtPath:myCacheDirectory]) {

    //不存在 那么创建

    [[NSFileManager defaultManager] createDirectoryAtPath:myCacheDirectory withIntermediateDirectories:YES attributes:nil error:nil];

    }

    //用md5进行 加密 转化为 一串十六进制数字 (md5加密可以把一个字符串转化为一串唯一的用十六进制表示的串)

    NSString * newName = MD5Hash(urlName);

    //拼接路径

    return [myCacheDirectory stringByAppendingPathComponent:newName];

    }

    ```

    ### 清除缓存

    ```

    + (void) resetCache {

    [[NSFileManager defaultManager] removeItemAtPath:[MZLCache cacheDirectory] error:nil];

    }

    ```

    ### 缓存目录

    ```

    + (NSString*) cacheDirectory {

    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

    NSString *cacheDirectory = [paths objectAtIndex:0];

    cacheDirectory = [cacheDirectory stringByAppendingPathComponent:@"MZLCaches"];

    return cacheDirectory;

    }

    ```

    ### 删除指定的缓存

    ```

    + (NSData*) objectForKey:(NSString*)key {

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSString *filename = [self.cacheDirectory stringByAppendingPathComponent:key];

    if ([fileManager fileExistsAtPath:filename])

    {

    NSDate *modificationDate = [[fileManager attributesOfItemAtPath:filename error:nil] objectForKey:NSFileModificationDate];

    if ([modificationDate timeIntervalSinceNow] > cacheTime) {

    [fileManager removeItemAtPath:filename error:nil];

    } else {

    NSData *data = [NSData dataWithContentsOfFile:filename];

    return data;

    }

    }

    return nil;

    }

    ```

    ### 创建指定的缓存

    ```

    + (void) setObject:(NSData*)data forKey:(NSString*)key {

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSString *filename = [self.cacheDirectory stringByAppendingPathComponent:key];

    BOOL isDir = YES;

    if (![fileManager fileExistsAtPath:self.cacheDirectory isDirectory:&isDir]) {

    [fileManager createDirectoryAtPath:self.cacheDirectory withIntermediateDirectories:NO attributes:nil error:nil];

    }

    NSError *error;

    @try {

    [data writeToFile:filename options:NSDataWritingAtomic error:&error];

    }

    @catch (NSException * e) {

    //TODO: error handling maybe

    }

    }

    ```

    ### 获取某个路径下文件的大小

    ```

    + (long long) fileSizeAtPath:(NSString*) filePath{

    NSFileManager* manager = [NSFileManager defaultManager];

    if ([manager fileExistsAtPath:filePath]){

    return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];

    }

    return 0;

    }

    ```

    ### 获取缓存的大小

    ```

    + (float ) folderSizeAtPath:(NSString*) folderPath{

    NSFileManager* manager = [NSFileManager defaultManager];

    if (![manager fileExistsAtPath:folderPath])

    return 0;

    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];

    NSString* fileName;

    long long folderSize = 0;

    while ((fileName = [childFilesEnumerator nextObject]) != nil){

    NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];

    folderSize += [MZLCache fileSizeAtPath:fileAbsolutePath];

    }

    return folderSize/(1024.0*1024.0);

    }

    ```

    ## MD5加密字符串

    ```

    NSString * MD5Hash(NSString *aString) {

    const char *cStr = [aString UTF8String];

    unsigned char result[16];

    CC_MD5( cStr, (CC_LONG)strlen(cStr), result );

    return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",

    result[0], result[1], result[2], result[3],

    result[4], result[5], result[6], result[7],

    result[8], result[9], result[10], result[11],

    result[12], result[13], result[14], result[15]];

    }

    ```

    ## 正则判断

    ### 手机格式的正则判断

    ```

    + (BOOL)isMobileNumber:(NSString *)mobileNum

    {

    /**

    * 手机号码

    * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188

    * 联通:130,131,132,152,155,156,185,186

    * 电信:133,1349,153,180,189,181

    * 新增:14_,17_

    */

    NSString * MOBIL = @"^1(3[0-9]|4[0-9]|5[0-35-9]|7[0-9]|8[025-9])\\d{8}$";

    /**

    10        * 中国移动:China Mobile

    11        * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188

    12        */

    NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[2378])\\d)\\d{7}$";

    /**

    15        * 中国联通:China Unicom

    16        * 130,131,132,152,155,156,185,186

    17        */

    NSString * CU = @"^1(3[0-2]|5[256]|8[56])\\d{8}$";

    /**

    20        * 中国电信:China Telecom

    21        * 133,1349,153,180,189,181(增加)

    22        */

    NSString * CT = @"^1((33|53|8[019])[0-9]|349)\\d{7}$";

    /**

    25        * 大陆地区固话及小灵通

    26        * 区号:010,020,021,022,023,024,025,027,028,029

    27        * 号码:七位或八位

    28        */

    // NSString * PHS = @"^0(10|2[0-5789]|\\d{3})\\d{7,8}$";

    NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBIL];

    NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];

    NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];

    NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];

    if (([regextestmobile evaluateWithObject:mobileNum]

    || [regextestcm evaluateWithObject:mobileNum]

    || [regextestct evaluateWithObject:mobileNum]

    || [regextestcu evaluateWithObject:mobileNum])) {

    return YES;

    }

    return NO;

    }

    ```

    ### 密码正则判断6-16 大小写数字

    ```

    + (BOOL) isPassword:(NSString *)password;

    {

    NSRegularExpression *regularexpression = [[NSRegularExpression alloc]

    initWithPattern:@"^[a-zA-Z0-9]{6,16}$"

    options:NSRegularExpressionCaseInsensitive

    error:nil];

    NSUInteger numberofMatch = [regularexpression numberOfMatchesInString:password

    options:NSMatchingReportProgress

    range:NSMakeRange(0, password.length)];

    if(numberofMatch > 0)

    return YES;

    return NO;

    ```

    ### 邮箱的正则判断

    ```

    + (BOOL) isEmail:(NSString *)email

    {

    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];

    if ([emailTest evaluateWithObject:email]) {

    return YES;

    }

    return NO;

    }

    ```

    ### 身份证正则判断

    ```

    + (BOOL) isIdentityCard: (NSString *)identityCard

    {

    NSString *idnum = @"^(\\d{14}|\\d{17})(\\d|[xX])$";

    NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",idnum];

    return [identityCardPredicate evaluateWithObject:identityCard];

    }

    ```

    相关文章

      网友评论

        本文标题:iOS一些常用的判断

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