如何根据条件添加其他属性?
在下面的代码中,我收到了错误Cannot assign value of type 'some View' (result of 'Self.overlay(_:alignment:)') to type 'some View' (result of 'Self.onTapGesture(count:perform:)')
import SwiftUI
struct ConditionalProperty: View {
@State var overlay: Bool
var body: some View {
var view = Image(systemName: "photo")
.resizable()
.onTapGesture(count: 2, perform: self.tap)
if self.overlay {
view = view.overlay(Circle().foregroundColor(Color.red))
}
return view
}
func tap() {
// ...
}
}
最佳答案
Rob Mayoff已经很好地解释了为什么出现此行为,并提出了两种解决方案(透明覆盖或使用AnyView
)。第三种更优雅的方法是使用_ConditionalContent。
创建_ConditionalContent
的一种简单方法是在组或堆栈中编写if
else
语句。这是使用组的示例:
import SwiftUI
struct ConditionalProperty: View {
@State var overlay: Bool
var body: some View {
Group {
if overlay {
base.overlay(Circle().foregroundColor(Color.red))
} else {
base
}
}
}
var base: some View {
Image("photo")
.resizable()
.onTapGesture(count: 2, perform: self.tap)
}
func tap() {
// ...
}
}