运行以下代码时,// start when mousedown
Observable.fromEvent(element, 'mousedown')
.subscribe(() => {
Observable.fromEvent(element, 'mousemove')
// finish when mouseup
.takeUntil(Observable.fromEvent(element, 'mouseup'))
.subscribe(() => {/*do something on mousemove*/});
});
内的self
为defaultModuleName
,当人们期望它为ReactViewController
时。为什么呢?
FooViewController
答案 0 :(得分:0)
您只需要传递self
而不是type(of: self)
,并使用String(describing:)
初始值设定项。
class ClassA {
static var className: String {
return String(describing: self)
}
}
class ClassB: ClassA { }
print(ClassB.className) // prints "ClassB"
编辑:澄清var moduleName: String = defaultModuleName
更新。假设我将这一行添加到上面的例子中(同样的想法):
class ClassA {
// This is a property of ClassA -> it gets implicitly initialized
// when ClassA does -> it uses ClassA.className for its value
var instanceClassName = className
static var className: String {
return String(describing: self)
}
}
class ClassB: ClassA { }
print(ClassB().instanceClassName) // prints "ClassA"
这个新instanceClassName
不是静态的,因此它是ClassA
上的实例属性。因此在初始化ClassA
时初始化(初始化ClassB时不)。使用对ClassA
的引用,在className
内设置的属性,将打印出ClassA
。