【发布时间】:2015-11-18 12:13:42
【问题描述】:
我的函数有这个签名:
func foo(bar: String, baz: ((String) -> ())? = nil)
现在我想让self 在给定的闭包内转义。
但是当我尝试这个时:
func foo(bar: String, @noescape baz: ((String) -> ())? = nil)
编译器抱怨:
@noescape may only be applied to parameters of function type
是否可以在可选参数中使用它?
【问题讨论】:
-
它不能与可选功能一起使用。如果您删除
? = nil它可以工作。 -
感谢您的快速回复,我知道删除
? = nil有效,让我们看看是否有人有不同的想法 -
我的编译器也抱怨。我可以知道,你为什么需要这个?我认为 noescape 告诉“执行完成后保证不需要它”。可选意味着该值存在于两种不同的状态。如果将 nil 设置为可选值,则仍然存在一些对其的引用。如果闭包是可选的,则闭包可以为零,但仍然存在对它的引用。 noescape 似乎更像是“临时的”......非常有趣的问题!
-
我希望能够向
foo发送或不发送闭包,但如果我这样做了,我不想在我的闭包中使用self.。是的,闭包不会被异步存储或调用 -
我也有这个问题,不明白为什么不能将@noescape 添加到可选闭包中(除非语言设计者还没有解决这个问题)。