【发布时间】:2019-12-28 06:49:05
【问题描述】:
我正在尝试在 SwiftUI 中实现以下功能:
struct PersonView: View {
@State private var age: Int? = 0
var body: some View {
VStack {
Text("Just a test")
if let self.age > 0 {
Text("Display Age: \(age)")
} else {
Text("Age must be greater than 0!")
}
}
}
}
但是,在 SwiftUI 中,if let 会导致以下错误:
包含控制流语句的闭包不能与函数生成器“ViewBuilder”一起使用
所以在研究了这个主题之后,我发现了一个建议,即使用 .map 来解开 age 可选。因此,我修改为VStack 中的代码如下:
Text("Just a test")
self.age.map {elem in
if elem > 0 {
Text("Display Age: \(elem)")
} else {
Text("Age must be greater than 0!")
}
}
但是,在 .map 闭包中包含条件会导致调用 VStack 的行出现以下错误:
' (ViewBuilder.Type) -> (C0, C1) -> TupleView' 要求 '()' 符合 'View'
类型'()'不符合协议'View'
关于如何克服第二组错误有什么建议吗?或者,是否有另一种方法可以在 SwiftUI 中展开选项并评估它们?真的很喜欢 SwiftUI,但不敢相信解包选项令人头疼!
【问题讨论】:
标签: view closures conditional-statements swiftui optional