"modifier" 和 "Modifier" 有什么区别(Kotlin Android,Jetpack Compose)

What's difference "modifier" and "Modifier" (Kotlin Android, Jetpack Compose)

代码参考:https://www.youtube.com/watch?v=Kw4_i4l5y4s&ab_channel=PhilippLackner

我有两个关于此代码的问题

@Composable
fun ProfileSection(
    modifier: Modifier = Modifier
) {
    Column(modifier = Modifier.fillMaxWidth()) {
        Row(
            verticalAlignment = Alignment.CenterVertically,
            modifier = Modifier
                .fillMaxWidth()
                .padding(horizontal = 20.dp)
        ){
            RoundImage(
                image = painterResource(id = R.drawable.messi1),
                modifier = Modifier
                    .size(100.dp)
                    .weight(3f)
            )
            Spacer(modifier = Modifier.width(16.dp))
            StatSection(modifier = Modifier.weight(7f))
        }
    }
}

[第3行]首先是为什么要用'modifier: Modifier = Modifier'?它到底有什么作用?

[第 5 行] 第二个是“m”修饰符和“M”修饰符有什么区别?将 Modifier 更改为修饰符时,不会发生代码错误(红色下划线)。结果不是我想要的。

你懂的int: Int = 0?与此相同。第一个 int 是我们的名字(它可以是我们想要的任何东西)。冒号后的第二个 Int 是我们的类型,我们希望 int 保存的数据类型。第三个是值,在本例中为 0

modifier是参数的名称,Modifier是类型,Modifier是价值。现在您可能会对 Modifier 本身是 Modifier 类型的对象这一事实感到困惑,但不要对此过分强调。它是一个伴生对象,因此您既可以将其用作对象类型,也可以将其用作对象本身。

另外,既然你看到了,Kotlin 可以根据提供的值推断类型,你甚至可以在这里跳过类型。例如,在 var int: Int = 0 中,Int 是多余的。 Kotlin 会知道类型是 Int 因为我们已经分配了该类型的值(0,是 Integer)。所以,我们可以把它写成:var int = 0.

但是,参数不是这种情况,也就是说,如果所关注的实体是函数的参数,您仍然必须指定类型,即使您赋值。

因此,在您的示例中,

fun ProfileSection(
    modifier: Modifier = Modifier
) { ... }