BLOGサブスレッドの日常
2025.07.02
SwiftUIのモディファイアを、OSバージョンによって切り分ける
chao
どうも、久々の清水です。
SwiftUI使ってますか?
最近は、iOS開発をする機会が少なくなって来たのですが
以前、開発しているとき、特定のバージョン以上でないと使えないモディファイアがあって
その実装方法に困ったことがあったので、解決方法を紹介したいと思います。
困ったこと
以下のような困り事がありました。
- 最低iOSバージョンは15
- モディファイアはiOS16から使えるもの
- そのまま使うと、iOS15では使えないとエラーが出てしまう
- 対策のため、iOS16以上かどうかを判定してモディファイアを使いたい
- しかし、モディファイアを利用するときに if 文での判定はできない
- 困った!
解決方法
例えば、iOS16以降で使えるTextのfontDesign()というモディファイアを使いたい場合を考えます。
https://developer.apple.com/documentation/swiftui/text/fontdesign(_:)
まずは、以下のようにViewのextensionを用意します。
extension View {
func extend<Content: View>(@ViewBuilder transform: (Self) -> Content) -> some View {
transform(self)
}
}
次に、以下のよう実装すれば、iOS16以降のみfontDesign()を使うことができます!
(エラーも出ません)
struct FontDesignExample: View {
var body: some View {
VStack(spacing: 20) {
Text("iOS16以降のみfontDesignを使うサンプル")
.extend { view in
if #available(iOS 16.0, *) {
// iOS16以上であれば、fontDesign() を使う
view.fontDesign(.serif)
} else {
// iOS16未満では使えないので、そのままviewを返す
view
}
}
}
.padding()
}
終わりに
ということで、OSバージョンによってモディファイアを切り分ける方法の紹介でした。
それでは、良いSwiftUIライフをお過ごしください!
この記事を書いた人
chao
