繁体   English   中英

在Swift可选功能块中引发错误

[英]In Swift optional function in block raises error

以下是测试代码:

在此处输入图片说明

在第一个中,onComplete函数不是可选的,一切都很好。

但是,在第二个中,发生错误。

有人可以向我解释吗?


更新

错误消息是:

在此处输入图片说明

在这种情况下,您有2个选项。 如果您知道onComplete块将存在,则可以强制展开看起来像这样的包装:

func test2(onComplete: blankBlock?) {
    UIView.animateWithDuration(1.0, animations: {
        completeBlock!()
    })
}

如果您不知道onComplete块是否存在,则可以测试该值是否存在(推荐方式):

func test2(onComplete: blankBlock?) {
    UIView.animateWithDuration(1.0, animations: {
        if let validBlock = onComplete {
            validBlock()
        }
    })
}

编辑评论:我明白你的意思。 我认为这是因为对onComplete?()的调用实际上正在返回。 因为它是一个可选函数,所以它将执行或返回nil。 但是,animateWithDuration(_:animations :)期望您将为该块返回Void,但是在这种情况下,您可能会返回nil,这是不正确的。 我相信这是因为将您的代码更改为以下代码可以解决您的问题:

func test2(onComplete: blankBlock?) {
    UIView.animateWithDuration(1.0, animations: {
        onComplete?()
        return
    })
}

因为在Swift中,单个表达式闭包隐式返回expression的结果

即使您的blankBlock是()->VoidonComplete?()也会返回Void? 类型(即Voidnil )。

您应该这样做,以确保animations闭包的返回类型为Void

func test2(onComplete: blankBlock?) {
    UIView.animateWithDuration(1.0, animations: { () -> Void in
        onComplete?()
        return // <-- return Void explicitly
    })
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM