在 SwiftUI 中,@available 属性用于条件编译,检查设备的操作系统版本并根据系统版本执行不同的代码。它的作用是确保代码仅在特定的 iOS 版本或更高版本上运行,或者提供版本回退的代码。
基本语法
if #available(iOS 16, *) {
// 仅在 iOS 16 或更高版本上执行的代码
} else {
// 仅在 iOS 15 或更低版本上执行的代码
}
在 SwiftUI 中使用 @available
@available 可以用于检查视图和操作系统版本,确保在不同版本的 iOS 上使用适当的功能。通常,用它来调整一些新引入的控件或功能。
1、在 SwiftUI 中检查 iOS 版本
假设想根据不同的 iOS 版本使用不同的视图。
struct ContentView: View {
var body: some View {
VStack {
if #available(iOS 16, *) {
Text("Running on iOS 16 or newer")
.font(.title)
} else {
Text("Running on iOS 15 or older")
.font(.body)
}
}
}
}
2、使用 @available 限制视图特性
例如,iOS 16 引入了 NavigationStack,可以用 @available 来确保该视图特性只在 iOS 16 或更高版本上使用。
struct ContentView: View {
var body: some View {
if #available(iOS 16, *) {
NavigationStack {
Text("This is iOS 16+")
}
} else {
NavigationView {
Text("This is iOS 15 or earlier")
}
}
}
}
3、为不同版本提供不同的实现
如果应用包含一些只在新版本的 iOS 上可用的 API,可以通过条件编译确保兼容性。
@available(iOS 16, *)
func useNewFeature() {
// 仅在 iOS 16 或更高版本上使用的新特性
}
func useOldFeature() {
// 在 iOS 15 或更低版本上使用的旧特性
}
struct ContentView: View {
var body: some View {
VStack {
if #available(iOS 16, *) {
Button("Use New Feature") {
useNewFeature()
}
} else {
Button("Use Old Feature") {
useOldFeature()
}
}
}
}
}
注意事项
1、@available 的条件:
@available 可以检查多个条件,比如操作系统版本和设备类型。例如:@available(iOS 16, macOS 12, *)。
* 表示不限制特定平台,只要是该平台的较新版本即可。
2、版本回退:
使用 @available 时,可以使用 else 语句来处理不支持某个 API 的低版本系统,确保旧版本不会崩溃。
3、UI 适配:
当需要根据操作系统版本来调整 UI 布局时,@available 可以做版本适配,确保视图的兼容性。
通过在 SwiftUI 中使用 @available,可以确保代码在不同的系统版本中运行良好,提供最优的用户体验,同时避免因为使用不支持的 API 导致崩溃。