Swift中如何简洁实现iOS版本区间判断以优化代码?
解决iOS版本区间内应用特定修饰符的DRY写法
方案一:封装版本判断工具函数
先实现一个可复用的系统版本区间判断方法,避免重复编写版本逻辑:
import Foundation extension UIDevice { static func isiOSVersion(in range: ClosedRange<Double>) -> Bool { guard let systemVersion = Double(current.systemVersion) else { return false } return systemVersion >= range.lowerBound && systemVersion < range.upperBound } }
在SwiftUI中使用时,只需一次引用baseView:
UIDevice.isiOSVersion(in: 16.0...16.3) ? baseView.extraModifierOnlyNecessaryBetweeniOS16And16Point4() : baseView
方案二:封装View扩展(推荐)
直接给View添加扩展,把版本判断和修饰符应用逻辑封装在一起,调用时仅需链式调用:
import SwiftUI extension View { func applyLegacyiOS16Modifier() -> some View { // 匹配iOS 16.0 ≤ 版本 < 16.4的区间 if #available(iOS 16.0, *), !#available(iOS 16.4, *) { return self.extraModifierOnlyNecessaryBetweeniOS16And16Point4() } else { return self } } }
使用时简洁且无重复代码:
baseView.applyLegacyiOS16Modifier()
这里用!#available(iOS 16.4, *)替代#unavailable,Swift允许这种逻辑非写法,可与#available(iOS 16.0, *)组合实现区间判断,且能正常编译。
内容的提问来源于stack exchange,提问作者Michael Hulet
相关产品推荐
相关产品推荐

