如何在 SwiftUI 视图的这个自定义 .if 扩展中包装#available?
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, *)) { [=10=].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, *) {
[=10=].refreshable {
//
}
} else {
[=10=]
}
}
}
}
已将 @ViewBuilder
添加到 transform
参数,因此您可以在 if
:
中 return 不同的 View
类型
extension View {
@ViewBuilder func `if`<Transform: View>(_ condition: Bool, @ViewBuilder transform: (Self) -> Transform) -> some View {
if condition {
transform(self)
} else {
self
}
}
}
我正在使用这个 .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, *)) { [=10=].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, *) {
[=10=].refreshable {
//
}
} else {
[=10=]
}
}
}
}
已将 @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
}
}
}