如何限制API仅允许iOS 10.*版本调用?
如何限制API仅在iOS 10.x版本调用
嘿,这个需求我之前做项目时刚好碰到过!Swift里的@available(10.0, *)确实是放开了10及以上的所有版本,要精准限制在iOS 10.0到小于11.0的范围,有几种靠谱的实现方式:
方法一:用#available组合逻辑判断(推荐)
这是官方最推荐的写法,逻辑清晰且能准确匹配版本范围:
if #available(iOS 10.0, *), !#available(iOS 11.0, *) { // 这里的代码只会在iOS 10.x版本执行 yourTargetAPI() }
原理很简单:第一个条件确保系统版本不低于iOS 10.0,第二个条件排除了所有iOS 11.0及以上的版本,两者叠加就刚好锁定了iOS 10.x的区间。
方法二:直接检查系统版本号
如果偏好更直观的数值判断,也可以直接获取系统版本的主版本号:
// 方式A:用ProcessInfo获取版本信息 let osVersion = ProcessInfo.processInfo.operatingSystemVersion if osVersion.majorVersion == 10 { yourTargetAPI() } // 方式B:解析系统版本字符串 let systemVersion = UIDevice.current.systemVersion if let majorVersion = Int(systemVersion.components(separatedBy: ".").first ?? "") { if majorVersion == 10 { yourTargetAPI() } }
额外:给API加编译期标注(辅助限制)
如果想在编译阶段就提醒开发者不要在iOS11+调用这个API,可以给方法加上@available的废弃标注:
@available(iOS, introduced: 10.0, deprecated: 11.0, obsoleted: 11.0, message: "仅支持iOS 10.x版本") func yourTargetAPI() { // API实现代码 }
这样在iOS11及以上的项目里调用这个方法,编译器会抛出警告甚至错误,但要注意这只是编译期的提示,若要严格限制运行时执行,还是得搭配前面的运行时判断逻辑。
内容的提问来源于stack exchange,提问作者mskw
相关产品推荐
相关产品推荐

