无法将类型 '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.

轻松访问这些基元

但是 NSIntegerBOOL 等 ObjC 原语不支持可选值。因此,当您在 Kotlin 中声明一个可选原语时,它会被转换为“KotlinNumber”,因为在 ObjC 中需要一个对象来存储一个可选值。

KotlinNumberNSNumber的子类,所以可以这么用:

advert?.isLiked?.boolValue