在SwiftUI中将修饰符应用于视图时,顺序似乎很重要。
例如,此代码:
HStack {
Text("Hello world")
.padding()
.background(Color(UIColor.darkGray))
.cornerRadius(20.0)
}
..将产生以下内容:
更改修饰符的顺序,事情会发生变化。这段代码有效地“破坏”了修饰符,因为不再应用填充和拐角半径:
HStack {
Text("Hello world")
.background(Color(UIColor.darkGray))
.padding()
.cornerRadius(20.0)
}
这是为什么?我敢肯定有一个合理的解释,但我找不到任何文档或理由。
答案 0 :(得分:2)
修饰符是通过包装其修改的视图返回some View
的函数。例如,.padding
返回some View
,它实现了填充功能,其内容是它修改的视图以及填充:
所以,从概念上讲:
HStack {
Text("Hello world")
.padding()
.background(Color(UIColor.darkGray))
.cornerRadius(20.0)
}
大致等同于(组成名称和参数):
HStack(content: {
CornerRadiusView(20.0, content: {
BackgroundView(Color(UIColor.darkGray), content: {
PaddingView(content: {
Text("Hello world")
})
})
})
})
希望,从示例中可以清楚看到修饰符的顺序如何改变视图层次结构。
答案 1 :(得分:0)
新开发者的答案是正确的。 Here也是另一个很好的解释,说明幕后发生了什么。这只是同一概念的另一种观点:
每当我们对SwiftUI视图应用修饰符时,我们实际上都会创建一个 应用了更改的新视图–我们不只是修改现有视图 查看到位。如果您考虑一下,这种行为是有道理的-我们的 视图仅包含我们赋予它们的确切属性,因此如果我们设置 背景颜色或字体大小,没有地方可以存储该数据。