ฉันคิดว่าฉันแค่แบ่งปันฟังก์ชั่นที่ฉันรวบรวมมาเพื่อสิ่งนี้ มันไม่สมบูรณ์แบบเลย โปรดดูที่ตัวอย่างและผลลัพธ์ แต่ถ้าคุณกำลังตรวจสอบหมายเลขเวอร์ชันของคุณเอง (ซึ่งฉันต้องทำเพื่อจัดการสิ่งต่างๆเช่นการย้ายฐานข้อมูล) สิ่งนี้อาจช่วยได้เล็กน้อย
(เช่นกันลบคำสั่งบันทึกในวิธีการแน่นอนสิ่งเหล่านี้อยู่ที่นั่นเพื่อช่วยให้คุณเห็นว่ามันทำอะไรทั้งหมด)
การทดสอบ:
[self isVersion:@"1.0" higherThan:@"0.1"];
[self isVersion:@"1.0" higherThan:@"0.9.5"];
[self isVersion:@"1.0" higherThan:@"0.9.5.1"];
[self isVersion:@"1.0.1" higherThan:@"1.0"];
[self isVersion:@"1.0.0" higherThan:@"1.0.1"];
[self isVersion:@"1.0.0" higherThan:@"1.0.0"];
[self isVersion:@"1.0b" higherThan:@"1.0a"];
[self isVersion:@"1.0a" higherThan:@"1.0b"];
[self isVersion:@"1.0a" higherThan:@"1.0a"];
[self isVersion:@"1.0" higherThan:@"1.0RC1"];
[self isVersion:@"1.0.1" higherThan:@"1.0RC1"];
ผล:
1.0 > 0.1
1.0 > 0.9.5
1.0 > 0.9.5.1
1.0.1 > 1.0
1.0.0 < 1.0.1
1.0.0 == 1.0.0
1.0b > 1.0a
1.0a < 1.0b
1.0a == 1.0a
1.0 < 1.0RC1 <-- FAILURE
1.0.1 < 1.0RC1 <-- FAILURE
สังเกตว่าอัลฟ่าใช้งานได้ แต่คุณต้องระวังให้มาก เมื่อคุณใช้อัลฟาในบางจุดคุณจะไม่สามารถขยายได้โดยการเปลี่ยนตัวเลขรองอื่น ๆ ที่อยู่ข้างหลัง
รหัส:
- (BOOL) isVersion:(NSString *)thisVersionString higherThan:(NSString *)thatVersionString {
if ([thisVersionString compare:thatVersionString options:NSNumericSearch] == NSOrderedAscending) {
NSLog(@"%@ < %@", thisVersionString, thatVersionString);
return NO;
}
if ([thisVersionString compare:thatVersionString options:NSNumericSearch] == NSOrderedSame) {
NSLog(@"%@ == %@", thisVersionString, thatVersionString);
return NO;
}
NSLog(@"%@ > %@", thisVersionString, thatVersionString);
return YES;
}