如何在SwiftUI视图上包装这个自定义的



我正在使用这个.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
}
}
}

最新更新