iOS 优雅的比较版本号

Base Swift 3.1,Xcode 8.3.2

很多人选择用分割数组、按个比较的方式来做,这样是可以实现这个功能的,但是不那么优雅,iOS SDK 已经提供了必要的方法,就没有必要重复造轮子了。

下面利用 String 提供的 compare 方法,扩展了一下 String

extension String
{
    func ck_compare(with version: String) -> ComparisonResult {
        return compare(version, options: .numeric, range: nil, locale: nil)
    }
    
    func isNewer(than aVersionString: String) -> Bool {
        return ck_compare(with: aVersionString) == .orderedDescending
    }
    
    func isOlder(than aVersionString: String) -> Bool {
        return ck_compare(with: aVersionString) == .orderedAscending
    }
    
    func isSame(to aVersionString: String) -> Bool {
        return ck_compare(with: aVersionString) == .orderedSame
    }
}

首先提供了一个 “万能方法”,用来获取两个字符串按照数字的方式比较的结果。第二个参数 options 这里提供的值是 .numeric,这个枚举值可以使字符串的比较依据变成数字,但不是单纯的按字符比较,而是将连续的数字当作一个自然语言中的数字,比如10.3.1,第一个数字是10。

然后针对不同的场景,提供了三个便捷方法,可以快速的调用。

PS: Objective-C 亦有同样的 API,如有需要可以自己封装。

进一步的,我们可以封装一些针对 iOS 系统版本的 API

import UIKit

/// 用于判断当前系统版本是否低于指定版本
func systemVersion(below aVersionString: String) -> Bool
{
    return UIDevice.current.systemVersion.isOlder(than: aVersionString)
}

/// 用于判断当前系统版本是否高于指定版本
func systemVersion(over aVersionString: String) -> Bool
{
    return UIDevice.current.systemVersion.isNewer(than: aVersionString)
}

/// 用于判断当前系统版本是否等于指定版本
func systemVersion(sameAs aVersionString: String) -> Bool
{
    return UIDevice.current.systemVersion.isSame(as: aVersionString)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,223评论 4 61
  • 一直到刚才,才认真的听完昨晚的课程,听到中间声音有嘶哑的那十几秒时,我真心想谢谢蔡总,感谢她的坚持和精神...
    happyMia阅读 184评论 0 0
  • 漫夜长长,睡不着。内心有很多的灵感与想法,想要马上付诸一切的去做。心中也有更多想写的感受,却无从下手。 我想...
    空空dj阅读 222评论 0 0
  • 参加第20周入职培训的同事们: 大家好! 今天是入职培训的第二天,从今天开始我们开始讲述GCP的内容。 简单回顾今...
    SMO质保及培训部阅读 485评论 0 0
  • 有人/网络的地方就有是非。无论你愿不愿意这个事情都会发生,都会不知不觉的网住你的,因为人首先是一个社会动物。总有人...
    薄帷鉴明月阅读 442评论 0 1