为什么修改器顺序在SwiftUI中很重要?

为什么修改器顺序在SwiftUI中很重要?,swiftui,Swiftui,在SwiftUI中将修改器应用于视图时,顺序似乎很重要 例如,此代码: HStack{ 文本(“你好,世界”) .padding() .background(颜色(UIColor.darkGray)) .转弯半径(20.0) } …将产生以下结果: 改变修改器的顺序,事情就会改变。此代码有效地“打断”了修改器,因为不再应用填充和角半径: HStack{ 文本(“你好,世界”) .background(颜色(UIColor.darkGray)) .padding() .转弯半径(20.0) }

在SwiftUI中将修改器应用于视图时,顺序似乎很重要

例如,此代码:

HStack{
文本(“你好,世界”)
.padding()
.background(颜色(UIColor.darkGray))
.转弯半径(20.0)
}
…将产生以下结果:

改变修改器的顺序,事情就会改变。此代码有效地“打断”了修改器,因为不再应用填充和角半径:

HStack{
文本(“你好,世界”)
.background(颜色(UIColor.darkGray))
.padding()
.转弯半径(20.0)
}


为什么会这样?我确信有一个合乎逻辑的解释,但我找不到任何文档或理由。

修饰符是一个函数,通过包装它修改的内容视图返回
某些视图。例如,
.padding
返回实现填充功能的
某些视图,其内容是它修改的视图,加上填充:

因此,在概念上:

HStack {
  Text("Hello world")
    .padding()
    .background(Color(UIColor.darkGray))
    .cornerRadius(20.0)
}
大致相当于(由名称和参数组成):


希望从示例中可以清楚地看到修改器的顺序如何改变视图层次结构。

修改器是一个函数,它通过包装所修改的内容视图返回某个视图。例如,
.padding
返回实现填充功能的
某些视图,其内容是它修改的视图,加上填充:

因此,在概念上:

HStack {
  Text("Hello world")
    .padding()
    .background(Color(UIColor.darkGray))
    .cornerRadius(20.0)
}
大致相当于(由名称和参数组成):


希望从示例中可以清楚地看到修改器的顺序如何改变视图层次结构。

新开发人员的答案是正确的。这也是另一个很好的解释幕后发生了什么。这只是同一概念的另一个观点:

每当我们对SwiftUI视图应用修改器时,我们实际上会创建一个 应用该更改的新视图–我们不只是修改现有视图 就地查看。如果你仔细想想,这种行为是有道理的——我们的 视图只保存我们给它们的确切属性,因此如果我们设置 背景颜色或字体大小没有存储该数据的位置


新开发人员的回答是正确的。这也是另一个很好的解释幕后发生了什么。这只是同一概念的另一个观点:

每当我们对SwiftUI视图应用修改器时,我们实际上会创建一个 应用该更改的新视图–我们不只是修改现有视图 就地查看。如果你仔细想想,这种行为是有道理的——我们的 视图只保存我们给它们的确切属性,因此如果我们设置 背景颜色或字体大小没有存储该数据的位置