我声明了一个类型为Image?并且当视图出现时,基于该条件,该变量可以被分配具有不同修改器的不同图像。但是,当我在Image之后添加修改器并将其分配给变量时,我得到了"Cannot assign value of type 'some View' to type 'Image'"
错误。
struct TestView: View {
@State private var testIcon: Image?
var body: some View {
NavigationView {
VStack {
self.testIcon
Text("Hello World")
Spacer()
}.onAppear {
if condition1 {
self.testIcon = Image(systemName: "hand.wave")
} else if condition2 {
// Seeing error on this line
self.testIcon = Image(systemName: "calendar.circle").foregroundColor(.blue)
} else {
// Seeing error on this line
self.testIcon = Image(systemName: "magnifyingglass").foregroundColor(.gray)
}
}
}
}
}
在我看到错误的行上,我试着添加“作为?图像”接近尾声。我没有得到错误,但testIcon是空的,当我尝试这样做:self.testIcon = Image(systemName: "calendar.circle").foregroundColor(.blue) as? Image
或self.testIcon = Image(systemName: "magnifyingglass").foregroundColor(.gray) as? Image
如何使用不同的修改器设置Image变量?
1条答案
按热度按时间nsc4cvqm1#
foregroundColor
修饰符可以应用于其他视图类型,而不仅仅是Image
。您可以在文本或形状或几乎任何View
上使用它。如果查看foregroundColor的声明,您将看到它返回
some View
。这样做的效果是,一旦应用了修饰符,开始时使用的View的初始类型(Image
)对编译器不再可见。您可以将
testIcon
的类型更改为(any View)?
,这将允许赋值。然而,整个方法在我看来是错误的。在
onAppear
中更改状态属性,可能会使视图层次结构无效,并导致立即刷新视图,这有点难看。一般来说,你应该尽量避免在SwiftUI视图中使用过程性代码,而应该使用声明性代码。
你可以重构为: