gpt4 book ai didi

kotlin - 如何存储 Parcelable 接口(interface)的 boolean 属性?

转载 作者:行者123 更新时间:2023-12-02 06:58:48 24 4
gpt4 key购买 nike

我有一个data对象,UserUser 的属性之一是 Boolean。我不知道如何存储这个 Boolean,因为没有开箱即用的 writeBoolean()

根据我在线搜索的内容,存储 Boolean 属性的一种方法是使用 writeInt() 方法和三元运算符。

所以我在这里尝试了一下:

data class User(val contactNumber: String,
val email: String,
val fullName: String,
val isAdmin: Boolean,
val organization: String,
val unitNumber: String) : Parcelable {

override fun writeToParcel(dest: Parcel?, flags: Int) {
dest?.writeString(contactNumber)
dest?.writeString(email)
dest?.writeString(fullName)
dest?.writeInt(isAdmin ? 1 : 0)
dest?.writeString(organization)
dest?.writeString(unitNumber)
}

}

但是这种语法似乎只适用于 Java,不适用于 Kotlin。我收到编译器错误,指示意外的标记(使用“:”分隔同一行上的表达式)。如何在 Kotlin 中完成此操作?

最佳答案

kotlin 不支持三元运算符使用 if-else 代替

writeInt(if(isAdmin) 1 else 0)

我使用writeValue,它对于可为空的变量也很有用

dest.writeValue(this.booleanVar)
booleanVar = parcel.readValue(Boolean::class.java.classLoader) as? Boolean?

如果可以为空,则添加 ?: false

upd:正如其他答案中所指出的,dest变量不能为空。据我所知,在使用 Android Studio 进行代码转换后,它被标记为可为空。如果您使用该功能,最好仔细检查您的代码,因为转换有时可能无法正常工作。

关于 ?. 一般情况。您可以使用 let 运算符重写它

dest?.let { it ->
it.write(....)

甚至更好

dest ?: retrun

关于kotlin - 如何存储 Parcelable 接口(interface)的 boolean 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55531478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com