SwiftUI,如果在里面查看 [英] SwiftUI if let inside View
本文介绍了SwiftUI,如果在里面查看的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想要在View
内使用if let语句.
I want a if let statement inside a View
.
@ObservedObject var person: Person?
var body: some View {
if person != nil {
// this works
}
if let p = person {
// Compiler error
}
}
包含封闭流的控制流语句不能与函数构建器"ViewBuilder"一起使用
推荐答案
或者您可以创建自己的IfLet
视图构建器:
Or you can create your own IfLet
view builder:
import SwiftUI
struct IfLet<Value, Content, NilContent>: View where Content: View, NilContent: View {
let value: Value?
let contentBuilder: (Value) -> Content
let nilContentBuilder: () -> NilContent
init(_ optionalValue: Value?, @ViewBuilder whenPresent contentBuilder: @escaping (Value) -> Content, @ViewBuilder whenNil nilContentBuilder: @escaping () -> NilContent) {
self.value = optionalValue
self.contentBuilder = contentBuilder
self.nilContentBuilder = nilContentBuilder
}
var body: some View {
Group {
if value != nil {
contentBuilder(value!)
} else {
nilContentBuilder()
}
}
}
}
extension IfLet where NilContent == EmptyView {
init(_ optionalValue: Value?, @ViewBuilder whenPresent contentBuilder: @escaping (Value) -> Content) {
self.init(optionalValue, whenPresent: contentBuilder, whenNil: { EmptyView() })
}
}
现在,您可以执行以下操作:
Using this, you can now do the following:
var body: some View {
IfLet(pieceOfData) { realData in
// realData is no longer optional
}
}
是否要回答,如果您的可选选项是nil
?
Want to respond if your optional is nil
?
var body: some View {
IfLet(pieceOfData, whenPresent: { realData in
// realData is no longer optional
DataView(realData)
}, whenNil: {
EmptyDataView()
})
}
这篇关于SwiftUI,如果在里面查看的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文