“修饰符”和“修饰符”有什么区别(Kotlin Android、Jetpack Compose)

Sue*_*e97 2 android android-jetpack 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))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

[第3行]首先是为什么使用'modifier: Modifier = Modifier'?它究竟有何作用?

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

Ric*_*per 6

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

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

另外,正如您所看到的,Kotlin 可以根据提供的值推断类型,您甚至可以在此处跳过类型。例如,在 中var int: Int = 0Int是多余的。Kotlin 会知道该类型是Int因为我们已经分配了该类型的值(0,是 Integer)。因此,我们可以将其写为:var int = 0

但是,参数的情况并非如此,也就是说,如果所关注的实体是函数的参数,即使分配了值,您仍然必须指定类型。

因此,在你的例子中,

fun ProfileSection(
    modifier: Modifier = Modifier
) { ... }
Run Code Online (Sandbox Code Playgroud)