3 回答

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個贊
這是比較版本的最簡單方法,請記住“ 1” <“ 1.0” <“ 1.0.0”:
NSString* requiredVersion = @"1.2.0";
NSString* actualVersion = @"1.1.5";
if ([requiredVersion compare:actualVersion options:NSNumericSearch] == NSOrderedDescending) {
// actualVersion is lower than the requiredVersion
}

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個贊
我將添加我的方法,該方法將嚴(yán)格的數(shù)字版本(無a,b,RC等)與任意數(shù)量的組件進(jìn)行比較。
+ (NSComparisonResult)compareVersion:(NSString*)versionOne toVersion:(NSString*)versionTwo {
NSArray* versionOneComp = [versionOne componentsSeparatedByString:@"."];
NSArray* versionTwoComp = [versionTwo componentsSeparatedByString:@"."];
NSInteger pos = 0;
while ([versionOneComp count] > pos || [versionTwoComp count] > pos) {
NSInteger v1 = [versionOneComp count] > pos ? [[versionOneComp objectAtIndex:pos] integerValue] : 0;
NSInteger v2 = [versionTwoComp count] > pos ? [[versionTwoComp objectAtIndex:pos] integerValue] : 0;
if (v1 < v2) {
return NSOrderedAscending;
}
else if (v1 > v2) {
return NSOrderedDescending;
}
pos++;
}
return NSOrderedSame;
}

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個贊
這是對Nathan de Vries答案的擴(kuò)展,以解決1 <1.0 <1.0.0等問題。
首先,我們可以使用以下NSString類別解決版本字符串中多余的“ .0”的問題:
@implementation NSString (VersionNumbers)
- (NSString *)shortenedVersionNumberString {
static NSString *const unnecessaryVersionSuffix = @".0";
NSString *shortenedVersionNumber = self;
while ([shortenedVersionNumber hasSuffix:unnecessaryVersionSuffix]) {
shortenedVersionNumber = [shortenedVersionNumber substringToIndex:shortenedVersionNumber.length - unnecessaryVersionSuffix.length];
}
return shortenedVersionNumber;
}
@end
通過上述NSString類別,我們可以縮短版本號,以刪除不必要的.0
NSString* requiredVersion = @"1.2.0";
NSString* actualVersion = @"1.1.5";
requiredVersion = [requiredVersion shortenedVersionNumberString]; // now 1.2
actualVersion = [actualVersion shortenedVersionNumberString]; // still 1.1.5
現(xiàn)在,我們?nèi)匀豢梢允褂肗athan de Vries提出的簡單漂亮的方法:
if ([requiredVersion compare:actualVersion options:NSNumericSearch] == NSOrderedDescending) {
// actualVersion is lower than the requiredVersion
}
添加回答
舉報