Swift 到 Kotlin - 扩展

Swift to Kotlin - Extensions

我正在尝试创建自定义变量 (fooModel) 作为 Android 'Activity' class 的扩展。在 Swift 中,这只是作为 'UIViewController' 的 class 扩展完成的,创建变量然后随时访问它。

这是在 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
}

这将引发以下错误:

Unresolved reference: fooModel

一个自动生成的解决方案是导入'fooModel',但这似乎不正确,仍然没有解决错误。

注意:我能够通过遵循 'Activity' class 的变量访问此变量扩展名(请参阅下面的示例),这看起来像应该可以,我只是遗漏了一些东西:

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