无法将类型 'KotlinBoolean' 的值转换为预期的参数类型 'Bool'
Cannot convert value of type 'KotlinBoolean' to expected argument type 'Bool'
我正在制作一个多平台 KMM 项目,但我无法为按钮分配动态值 属性。
基本上我有这个按钮,它根据 selected
属性:
改变它的状态
struct SelectFavouriteButton: View {
@State var selected = false
let action: (Bool) -> Void
var body: some View {
Button(action: {
selected.toggle()
self.action(selected)
}) {
Image(systemName: selected ? "heart.fill" : "heart" )
.foregroundColor(.accentRed)
}
}
}
来自 Kotlin 部分的视图模型:
@Serializable
data class Data(
...
var isLiked: Boolean? = null,
var isSaved: Boolean? = null,
...
}
以及调用此按钮的视图:
struct CellView: View {
@State var advert: Data?
var body: some View {
// Cannot convert value of type 'KotlinBoolean' to expected argument type 'Bool'
// Insert ' as! Bool'
SelectFavouriteButton(selected: advert?.isLiked ?? false){ isPressed in // Error is here
self.action(isPressed, advert?.id ?? "" , false)
}
}
}
我应该使用映射吗?如果是,我该如何在当前上下文中执行此操作?
请帮忙
Kotlin 原语在 swift 中转移到 NSNumber
,因此请尝试以下操作(未测试 - 仅想法)
let linked = advert.isLiked as? NSNumber // or NSNumber?
SelectFavouriteButton(selected: linked?.boolValue ?? false){ isPressed in
self.action(isPressed, advert?.id ?? "" , false)
}
@Asperi 的建议应该可以,但是推理不太对。
Kotlin 基元可以完美地转移到 ObjC 基元,并且可以从 Swift.
轻松访问这些基元
但是 NSInteger
或 BOOL
等 ObjC 原语不支持可选值。因此,当您在 Kotlin 中声明一个可选原语时,它会被转换为“KotlinNumber”,因为在 ObjC 中需要一个对象来存储一个可选值。
KotlinNumber
是NSNumber
的子类,所以可以这么用:
advert?.isLiked?.boolValue
我正在制作一个多平台 KMM 项目,但我无法为按钮分配动态值 属性。
基本上我有这个按钮,它根据 selected
属性:
struct SelectFavouriteButton: View {
@State var selected = false
let action: (Bool) -> Void
var body: some View {
Button(action: {
selected.toggle()
self.action(selected)
}) {
Image(systemName: selected ? "heart.fill" : "heart" )
.foregroundColor(.accentRed)
}
}
}
来自 Kotlin 部分的视图模型:
@Serializable
data class Data(
...
var isLiked: Boolean? = null,
var isSaved: Boolean? = null,
...
}
以及调用此按钮的视图:
struct CellView: View {
@State var advert: Data?
var body: some View {
// Cannot convert value of type 'KotlinBoolean' to expected argument type 'Bool'
// Insert ' as! Bool'
SelectFavouriteButton(selected: advert?.isLiked ?? false){ isPressed in // Error is here
self.action(isPressed, advert?.id ?? "" , false)
}
}
}
我应该使用映射吗?如果是,我该如何在当前上下文中执行此操作? 请帮忙
Kotlin 原语在 swift 中转移到 NSNumber
,因此请尝试以下操作(未测试 - 仅想法)
let linked = advert.isLiked as? NSNumber // or NSNumber?
SelectFavouriteButton(selected: linked?.boolValue ?? false){ isPressed in
self.action(isPressed, advert?.id ?? "" , false)
}
@Asperi 的建议应该可以,但是推理不太对。
Kotlin 基元可以完美地转移到 ObjC 基元,并且可以从 Swift.
轻松访问这些基元但是 NSInteger
或 BOOL
等 ObjC 原语不支持可选值。因此,当您在 Kotlin 中声明一个可选原语时,它会被转换为“KotlinNumber”,因为在 ObjC 中需要一个对象来存储一个可选值。
KotlinNumber
是NSNumber
的子类,所以可以这么用:
advert?.isLiked?.boolValue