我正在使用这个.if
扩展,它工作得很好,应该添加到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
}
}
}
我通常只执行.if(true)
,然后检查闭包内的可用性。不幸的是,我们不能在if
修饰符中检查可用性。
的例子:
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
参数,以便您可以在if
中返回不同的View
类型:
extension View {
@ViewBuilder func `if`<Transform: View>(_ condition: Bool, @ViewBuilder transform: (Self) -> Transform) -> some View {
if condition {
transform(self)
} else {
self
}
}
}