iOS 14 でしか利用できないが、アプリが iOS 13 で利用できる場合、ビュー修飾子をビューに追加するにはどうすればよいですか?
たとえば、textCase(_)
. iOS 14 のセクション ヘッダーは大文字であるため、ヘッダー テキストの大文字と小文字を使用するには、で設定する必要があり.textCase(.none)
ますText
が、これは iOS 14 まで存在しませんでした。
Section(header:
Text("Header")
.textCase(.none) //FIXME: 'textCase' is only available in iOS 14.0 or newer
.font(.system(size: 14, weight: .bold))
.foregroundColor(.secondary)
.padding(.top, 50)
)
Xcode にはいくつかの提案があります。
- #利用可能なバージョンチェックの場合に追加
- @available 属性を追加
#available バージョン チェックを使用すると、その範囲指定されたすべてのコードが #available でラップされるため、コードを 1 行追加するには、そのすべてを複製する必要があります。@available を使用する場合は、body プロパティ全体または構造体全体を複製する必要があります。
iOS 14 の場合にのみ適用される独自の ViewModifier を作成することを検討しましたが、この恐ろしいエラーが発生します。
関数は不透明な戻り値の型を宣言していますが、その本体の return ステートメントには一致する基になる型がありません
struct CompatibleTextCaseModifier: ViewModifier {
func body(content: Content) -> some View {
if #available(iOS 14.0, *) {
return content
.textCase(.none)
} else {
return content
}
}
}