2017-10-10 195 views
2

我在Kotlin中使用授權。因此我的觀點有基類,它處理常見的網絡的結果,但唯一不同的是數據(Model類)kotlin,我們可以在另一個使用參數傳遞給它的類中改變實際變量的值?

class BaseDataDelegation<T>(var oldData: T): WebDataListener<T> { 
    override fun onSuccess(data: T) { 
     oldData = data //oldData's original variable value which is inside main activity should also be updated 

       /.../ 
    } 

    override fun onFailed() { 
     /.../ 
    } 


} 

然後在MainActivity我打電話

dataManager.getResponse(BaseDataDelegation(oldData))//in DataManager.getResponse(listener:WebDataListener<T>) 

現在,當我通過oldDataBaseDataDelegation,所以當的值oldDataBaseDataDelegation類別改變它應該反映回MainActivty變量。
如何在Kotlin中做到這一點?

回答

4

可以使用可變property reference實現這一目標。下面是一個例子:

class BaseDelegation<T>(val property: KMutableProperty0<T>) { 
    override fun onSuccess(data: T) { 
     property.set(data) 
    } 
} 

然後,以構建BaseDelegation,使用bound reference到的屬性,例如this::oldDatamyActivity::oldData(該屬性本身應該是可變的,即var)。

這裏有一個簡單的可運行演示:(link)

+0

看起來像它會工作,我會實現它之後更新你的。 –

+0

首先,是所有工作的感謝,但我不明白這種事,它是如何工作的,我已經閱讀文檔,但不是非常有幫助,你可以請解釋更 –

相關問題