[英]How to wrap #available in this custom .if extension on a SwiftUI View?
我正在使用這個.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
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.