我查了一下文档,上面说在构造器中,必须把当前类的属性全部初始化一边之后,才能调用父类的构造器。
这对于 闭包 类型的属性来说有些奇怪,如果其他类型的属性标注为可选类型之后,是可以在父类构造器之后给它赋值的,闭包 类型却不行,这是为什么?
var callback:() -> Void? //无论是不是可选类型,都必须在super.init之前,否则出错
init(frame: CGRect, touchUpInside:() -> Void) {
super.init(frame: frame)
self.callback = { touchUpInside($0) }
}
求各位大神解答。。
()->Void
代表 输入为空,返回 Void
的 closure
()->Void?
代表 输入为空,返回 Optional(Void)
的 closure
( ()->Void )?
代表 输入为空,返回 Void
的 Optional(closure)
( ()->Void? )?
代表 输入为空,返回 Optional(Void)
的 Optional(closure)