[英]Swift to Kotlin - Extensions
我正在嘗試創建一個自定義變量 (fooModel) 作為 Android 'Activity' 類的擴展。 在 Swift 中,這只是作為“UIViewController”的類擴展完成的,創建變量然后隨時訪問它。
這是適用於 Swift 的擴展:
extension UIViewController {
var fooModel : barFooModel? {
get {
return objc_getAssociatedObject(self, &AssociatedKeys.fooModel) as? barFooModel
}
set(value) {
objc_setAssociatedObject(self, &AssociatedKeys.fooModel, value, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}
在 Kotlin 中,我做了以下工作:
var Activity.fooModel: barFooModel?
get() = fooModel as barFooModel
set(value) {
fooModel = value
}
這會引發以下錯誤:
未解決的參考:fooModel
一種自動生成的解決方案是導入“fooModel”,但這似乎不正確並且仍然無法解決錯誤。
注意:我可以通過一個附加到“Activity”類的變量來訪問這個變量擴展(請參見下面的示例,了解它的外觀),這使得它看起來應該可以工作,我只是遺漏了一些東西:
fun <T: Activity, M: BarFooModel> newInstance(context: Context, activityType: T, _fooModel: M): T {
val intent = Intent(context, activityType::class.java) as T
**intent.fooModel = _fooModel** // intent.fooModel IS accessible, based on the extension created.
return intent
}
我在正確的軌道上嗎? 我該怎么做才能匹配 'fooModel' 變量擴展的 Swift 實現?
提前致謝。
如果我理解正確,這應該是這樣的:
object AssociatedKeys {
const val fooModel = "fooModel"
}
open class BarFooModel : Serializable
var Intent.fooModel: BarFooModel?
get() {
return getSerializableExtra(AssociatedKeys.fooModel) as BarFooModel?
}
set(value) {
putExtra(AssociatedKeys.fooModel, value)
}
fun <T : Activity, M : BarFooModel> newInstance(context: Context, activityType: T, _fooModel: M): Intent {
val intent = Intent(context, activityType::class.java)
intent.fooModel = _fooModel
return intent
}
Intent 可用於存儲Associated Objects
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.