Как обернуть #available в это настраиваемое расширение .if в представлении SwiftUI?
Я использую это расширение, которое отлично работает и должно быть добавлено в SwiftUI, однако в этом случае оно не сработает, чтобы проверить
#available
потому что
#available may only be used as condition of an 'if', 'guard' or 'while' statement
Как я могу заставить его работать с этим
.if
, в любом случае?
//Does not compile for #available may only be used as condition of an 'if', 'guard' or 'while' statement
ForEach...
.if(#available(iOS 15.0, *)) { $0.refreshable {
} }
extension View {
@ViewBuilder
func `if`<Transform: View>(
_ condition: Bool,
transform: (Self) -> Transform
) -> some View {
if condition {
transform(self)
} else {
self
}
}
}
1 ответ
Решение
Я обычно просто делаю
.if(true)
а затем проверьте наличие внутри укупорки. К сожалению, мы не можем проверить наличие в модификаторе.
Пример:
struct ContentView: View {
var body: some View {
List {
Text("Hello")
/* More list items... */
}
.if(true) {
if #available(iOS 15, *) {
$0.refreshable {
//
}
} else {
$0
}
}
}
}
Добавлен
@ViewBuilder
к
transform
параметр, чтобы вы могли вернуть разные
View
типы в
if
:
extension View {
@ViewBuilder func `if`<Transform: View>(_ condition: Bool, @ViewBuilder transform: (Self) -> Transform) -> some View {
if condition {
transform(self)
} else {
self
}
}
}