谷歌codelab Android Room with a View-静态编程语言有以下片段:
class WordViewModel(application: Application) : AndroidViewModel(application) {
// ...
private val coroutineContext: CoroutineContext
get() = parentJob + Dispatchers.Main
private val scope = CoroutineScope(coroutineContext)
// ...
}
根据我对这个答案的理解,自定义getter每次都会被评估,而赋值只在构建时评估。因此,实际上,范围将采用一个以后不会更改的值,那么对于
coroutineContext的自定义getter有什么用呢?
我认为在这个例子中,我们可以摆脱
private val coroutineContext: CoroutineContext
get() = parentJob + Dispatchers.Main
然后写下来
private val scope = CoroutineScope(parentJob + Dispatchers.Main)
因此,结果代码如下所示:
class WordViewModel(application: Application) : AndroidViewModel(application) {
private var parentJob = Job()
private val scope = CoroutineScope(parentJob + Dispatchers.Main)
// ...
}
我想在这种情况下写getter是一个风格问题。如果我们删除它,什么都不会改变。
当您在具有生命周期的组件(即AndroidActive
)中定义CoroutineScope
时,将coroutineContext
定义为计算属性(或自定义getter)更有意义。Javadoc中的示例是不言自明的:
class MyActivity : AppCompatActivity(), CoroutineScope {
lateinit var job: Job
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + job
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
job = Job()
}
override fun onDestroy() {
super.onDestroy()
job.cancel() // Cancel job on activity destroy. After destroy all children jobs will be cancelled automatically
}
}
在这种情况下,您正在生命周期方法中创建作业
,这就是为什么您需要计算属性来返回coroutineContext
以及在中创建的
。作业
实例。onCreate
本文向大家介绍Swift使用参数自定义初始化,包括了Swift使用参数自定义初始化的使用技巧和注意事项,需要的朋友参考一下 示例 请注意,您不能省略参数标签: 为了允许省略参数标签,请使用下划线_作为标签: 如果参数标签使用一个或多个属性共享名称,请使用self显式设置属性值:
如何向Swift中的子类添加自定义初始化器? 我创建了的一个子类,它看起来如下所示: 如果我加上这个,Xcode会抱怨处初始化。所以我想这也不是解决办法。所以我想知道如何在Swift中将自定义初始化器正确地添加到子类中(因为在Objective-C中这似乎不是问题)?
Swift 5.x String初始化、定义 1. 字面量初始化字符串 1.1 单行字面量字符串 let str = "some string" 1.2 字面量初始化多行字符串 let str = """ The white Rabbit put on his spectacles. "Where shell I begin, please your Majesty?" he asked. "
问题内容: 在Java中,但是在其他OO语言中,初始化属性定义之间也有区别,例如 并使用构造函数对其进行初始化? 我想不出任何实际的区别,有没有?否则,即使结果相同,是否存在一种方法优于另一种方法的情况? 问题答案: 初始化顺序在这里很重要。 将字段设置为默认初始值(0,false,null) 调用对象的构造函数(但不要执行构造函数的主体) 调用超类的构造函数 使用初始化程序和初始化块初始化字段
在kotlin中,我们可以使用以下两种方法和 什么时候使用哪种方法,这两种方法实际上是在下面进行的。哪一种方法是最好的?
问题内容: 您如何初始化以下结构? 我试过了: 没用: 我试过了: 没用: 问题答案: 您是一个具有匿名结构类型的字段。因此,您必须重复类型定义: 但在大多数情况下,最好将其定义为rob74建议的单独类型。