一个关于 Swift 闭包类型的属性在构造器中的问题

Johnny 发布于 2015年04月26日
无人欣赏。

我查了一下文档,上面说在构造器中,必须把当前类的属性全部初始化一边之后,才能调用父类的构造器。

这对于 闭包 类型的属性来说有些奇怪,如果其他类型的属性标注为可选类型之后,是可以在父类构造器之后给它赋值的,闭包 类型却不行,这是为什么?

var callback:() -> Void? //无论是不是可选类型,都必须在super.init之前,否则出错

init(frame: CGRect, touchUpInside:() -> Void) {
    super.init(frame: frame)
    self.callback = { touchUpInside($0) }
}

求各位大神解答。。

共4条回复
LeeWong 回复于 2015年04月27日

var callback:(() -> Void)?

Johnny 回复于 2015年04月27日

1楼 @LeeWong 原来是这样,谢高手指点! 但是为什么我没有加这个括号也可以呢?

LeeWong 回复于 2015年04月27日

()->Void 代表 输入为空,返回 Void 的 closure

()->Void? 代表 输入为空,返回 Optional(Void) 的 closure

( ()->Void )? 代表 输入为空,返回 Void 的 Optional(closure)

( ()->Void? )? 代表 输入为空,返回 Optional(Void) 的 Optional(closure)

Johnny 回复于 2015年04月27日

3楼 @LeeWong 懂了懂了,太感谢了!

登录 或者 注册