我正在制作一個多平臺 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)
}
}
}
我應該使用映射嗎?如果是,我如何在當前背景關系中做到這一點?請幫忙
uj5u.com熱心網友回復:
Kotlin 原語NSNumber迅速轉移到,所以請嘗試以下(未測驗 - 僅想法)
let linked = advert.isLiked as? NSNumber // or NSNumber?
SelectFavouriteButton(selected: linked?.boolValue ?? false){ isPressed in
self.action(isPressed, advert?.id ?? "" , false)
}
uj5u.com熱心網友回復:
@Asperi 的建議應該可行,但推理不太正確。
Kotlin 原語可以完美地轉換為 ObjC 原語,并且可以從 Swift 輕松訪問這些原語。
但是 ObjC 原語如NSInteger或BOOL不支持可選項。因此,當您在 Kotlin 中宣告一個可選原語時,它會被轉換為“KotlinNumber”,因為在 ObjC 中需要一個物件來存盤可選值。
KotlinNumber是 的子類NSNumber,因此您可以這樣使用它:
advert?.isLiked?.boolValue
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/337253.html
標籤:ios 迅速 科特林 迅捷 kotlin-多平台
