美文网首页
iOS 版本号比较

iOS 版本号比较

作者: 世界的一缕曙光 | 来源:发表于2017-03-14 09:38 被阅读122次

思路

  1. 首先通过正则表达式验证版本号格式是否正确

  2. 再对两个版本号进行比较

正则分析

首先开头是一个组合,该组合是开头为一个数字(该数字可能有多位),末尾是'.';并且这种组合有一组或多组;最后以数字(该数字可能有多位)结尾。

上代码

.h 

typedef NS_ENUM(NSInteger, VersionCompareType) {
    VersionCompareTypeError,
    VersionCompareTypeEqual,
    VersionCompareTypeLess,
    VersionCompareTypeGreater
};

@interface NSString (ValidVersion)

- (BOOL)isRightVersion;

+ (VersionCompareType)version1:(NSString *)v1 isGreaterThan:(NSString *)v2;

@end

.m

#import "NSString+ValidVersion.h"

@implementation NSString (ValidVersion)

+ (VersionCompareType)version:(NSString *)v1 isGreaterThan:(NSString *)v2 {
    if (![v1 isRightVersion] || ![v2 isRightVersion]) {
        return VersionCompareTypeError;
    }
    
    NSArray *v1Array = [v1 componentsSeparatedByString:@"."];
    NSArray *v2Array = [v2 componentsSeparatedByString:@"."];
    
    NSUInteger v1Count = v1Array.count;
    NSUInteger v2Count = v2Array.count;
    
    NSInteger count = MIN(v1Count, v2Count);
    VersionCompareType compareType = VersionCompareTypeEqual;
    for (int i = 0; i < count; i++) {
        NSString *item1 = v1Array[i];
        NSString *item2 = v2Array[i];
        if (item1 > item2) {
            compareType = VersionCompareTypeGreater;
            break;
        } else if (item1 < item2) {
            compareType = VersionCompareTypeLess;
            break;
        }
    }
    
    if (v1Count == v2Count ||
        compareType == VersionCompareTypeGreater ||
        compareType == VersionCompareTypeLess) {
        return compareType;
    }
    
    // if condictions don't match above, the temp value of compareType is VersionCompareTypeEqual.
    //    compareType = VersionCompareTypeEqual;
    if (v1Count > count) {
        for (NSUInteger i = count; i < v1Count; i++) {
            NSString *item = v1Array[i];
            if ([item integerValue] > 0) {
                compareType = VersionCompareTypeGreater;
                break;
            }
        }
    } else {
        for (NSUInteger i = count; v2Count; i++) {
            NSString *item = v2Array[i];
            if ([item integerValue] > 0) {
                compareType = VersionCompareTypeLess;
                break;
            }
        }
    }
    return compareType;
}

- (BOOL)isRightVersion {
    // this condition can't match the regex, don't need to judge.
    //    if (self == nil) return NO;

    //    NSString *regex = @"^([0-9]+[.]){1,}[0-9]{1,}$";
    NSString *regex = @"^(\\d+[.])+\\d+$";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    BOOL isMatch = [predicate evaluateWithObject:self];
    return isMatch;
}

demo地址

相关文章

  • iOS - 版本号比较

    //对外版本#define APP_ShortVersion [NSBundle mainBundle].info...

  • iOS 比较版本号

  • iOS 版本号比较

    思路 首先通过正则表达式验证版本号格式是否正确 再对两个版本号进行比较 正则分析 首先开头是一个组合,该组合是开头...

  • iOS版本号比较

    首先,先了解一下iOS版本号的规则 CFBundleShortVersionString(Version) Spe...

  • ios版本号比较

    版本号比较方法多样,而且容易出问题,以前遇到过两三次;以下代码逻辑比较严密: + (BOOL) canUpateL...

  • iOS APP版本号比较

    实际应用中,经常会用到当前APP的版本号跟商店的版本号进行比较,以此来判断手机APP是否进行更新。 以下提供了两个...

  • iOS版本号比较判断

    在进行版本更新的时候,需要对当前版本和接口数据版本号就行判断比较,发现有多种的比较方式。 最简单的比较方式,采用字...

  • iOS 应用版本号比较

  • iOS开发 比较版本号

    // 比较版本号

  • iOS版本号相关问题

    为了iOS10 的适配,可能需要区分版本问题 获取当前的版本号 版本号比较问题使用自带的NSString 类中的方...

网友评论

      本文标题:iOS 版本号比较

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