在以下代码中,我对'as'关键字感到困惑,因为实际上var windowController: NSWindowController?
override func viewDidAppear() {
super.viewDidAppear()
self.view.window?.delegate = self
windowController = view.window?.windowController
}
func windowWillClose(_ notification: Notification) {
self.view.window?.windowController // NOT nil
}
func windowShouldClose(_ sender: NSWindow) -> Bool {
self.view.window?.windowController // NOT nil
return true
}
本身是一个formArray对象,那么为什么我需要再次将formArray作为formArray返回?但是实际上这是真的,因为如果我直接返回this.form.get('topics')
,那么它就不能执行某些功能,例如push,controls和removeAt,但是为什么会发生这种情况呢?我尝试同时控制台this.form.get('topics')
和return this.form.get('topics') as FormArray;
的日志,但是仍然得到完全相同的formArray对象,但是为什么呢?为什么它已经是一个formArray我仍然需要将它作为formArray返回才能执行formArray可以执行的某些操作?关键字“ as”做了什么?
return this.form.get('topics')
答案 0 :(得分:1)
如前所述,这是Type Assertion。这就像强制转换,在代码未提示您知道类型时,告诉编译器类型。
所以这里return this.form.get('topics') as FormArray;
现在,编译器将知道返回的对象是FormArray。这是有益的,因为编译器/ IDE现在将知道对象的形状以及对象的形状和属性。 .length
等
如果不需要这种样式,可以简化为为函数提供返回类型。该方法称为Type Annotation。
public get topics(): FormArray <-- type assigned here. {
return this.form.get('topics');
}
答案 1 :(得分:1)
等效于
get topics() : FormArray {
const result : FormArray = this.form.get('topics');
return result;
}
请参阅 As Usage