苹果的文档指定:
首次初始化属性时,不会调用willSet和didSet观察器。仅当在初始化上下文之外设置属性的值时才调用它们。
是否可以强制在初始化期间调用它们?
假设我有这堂课
class SomeClass {
var someProperty: AnyObject {
didSet {
doStuff()
}
}
init(someProperty: AnyObject) {
self.someProperty = someProperty
doStuff()
}
func doStuff() {
// do stuff now that someProperty is set
}
}
我创建了method doStuff
,以使处理调用更简洁,但我只想处理didSet
函数中的属性。有没有办法在初始化过程中强制此调用?
我决定只为我的类删除便捷的初始化器,并强迫您在初始化后设置属性。这使我知道didSet
将永远被调用。我还不确定总体上是否更好,但这很适合我的情况。
创建一个自己的set-Method并在init-Method中使用它:
class SomeClass {
var someProperty: AnyObject! {
didSet {
//do some Stuff
}
}
init(someProperty: AnyObject) {
setSomeProperty(someProperty)
}
func setSomeProperty(newValue:AnyObject) {
self.someProperty = newValue
}
}
通过声明
someProperty
为type :(AnyObject!
一个隐式解包的可选),可以让self完全初始化而无需
someProperty
设置。打电话时,setSomeProperty(someProperty)
您叫的等价物
self.setSomeProperty(someProperty)
。通常,您将无法执行此操作,因为self尚未完全初始化。由于
someProperty
不需要初始化,并且您正在调用依赖于self的方法,因此Swift会离开初始化上下文,并且didSet将运行。
问题内容: 是否可以在python中使用全1来初始化切片? 蟒蛇: 高朗 有可能做得更好吗? 问题答案: 是的,但是您必须使用其他语法。 它被称为“复合文字” 另外,如果有理由进行迭代(如计算基于循环变量的值等),则可以使用关键字而不是旧式,因为i等于i,小于i ++循环。
在信号量(java.util.concurrent.Semaphore)初始化期间,我没有得到负许可背后的基本原理。 我知道调用release()方法最终可能会使信号量的许可证大于等于1( 然而,我没有得到任何实际的用例,在这种情况下,我将使用负许可初始化信号量。 参考样本代码:
我创建了一个带有和的Android应用程序。我想在 TextView 中显示微调器下拉列表中的选定项。我在 方法中实现了微调器,因此当我运行该程序时,它会在 中显示一个值(在从下拉列表中选择一个项目之前)。 我只想在从下拉列表中选择一个项目后在TextView中显示该值。我该怎么做? 以下是我的代码:
我刚刚偶然发现了GCC和Clang之间关于显式默认constexpr ctor和一些继承的以下差异。。。 GCC立即拒绝代码,而Clang允许实例化这两种类型的非constexpr版本。我的猜测是,叮当声可能是正确的,但我不是百分之百肯定。。。
我正在开发我的第一个 Swing 应用程序,现在提出了一个难题:在静态初始化期间或开始实际执行后执行引导和资源初始化。我是什么意思...我有单例: 因此,方法如下所示 或者,也许我在启动后手动初始化资源,然后运行它。逻辑上正确的方式是什么?
我将firebase添加到我的android项目中,以使用firebase云消息传递。我按照文档进行了操作,但没有找到调用的任何说明。 我的应用程序工作很好,除了有一次它崩溃了以下错误。 当我搜索错误时,给出的解决方案是在启动时调用。 我想知道这是否真的有必要,因为文档没有提到它,我的应用程序在没有它的情况下工作(大部分)很好。 有人知道调用是否真的有必要,还有什么可能导致我上面提到的错误吗? 下