簡體   English   中英

Swift 到 Kotlin - 擴展

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM