没有有意义的错误的快速尾随关闭失败
Posted
技术标签:
【中文标题】没有有意义的错误的快速尾随关闭失败【英文标题】:Swift Traling Closure Failure Without Meaningful Error 【发布时间】:2014-06-26 23:42:27 【问题描述】:我试图传递一个尾随闭包参数如下(代码在没有这个函数的情况下工作):
PNObservationCenter.defaultCenter().addClientConnectionStateObserver(self)
(origin: String!, connected: Bool!, error: PNError!) in
if (connected)
println("OBSERVER: Successful Connection!");
else if (!connected || error)
println("OBSERVER: \(error.localizedDescription), Connection Failed!");
但是,构建失败并显示以下消息:
命令 /Applications/Xcode6- Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift 失败,退出代码为 254
有人知道我做错了什么吗?提前致谢。
编辑:如果实现为非尾随闭包或作为参数传递的单独函数,此代码仍然会崩溃。
【问题讨论】:
如果你的闭包没有尾随,它会起作用吗?顺便说一句,这看起来是编译器崩溃了,所以即使你的代码无效,这也是苹果的一个错误 如果我单独定义函数或将此代码实现为非尾随闭包,它仍然会崩溃 【参考方案1】:在将 Xcode 从 beta 1 升级到 beta 2 后,我也遇到了这个错误。显然闭包定义发生了一些变化。尝试使用 Void 而不是 ()。所以你的代码是:
PNObservationCenter.defaultCenter().addClientConnectionStateObserver(self) (来源:String!,连接:Bool!,错误:PNError!)-> Void in 如果(连接) println("观察者:连接成功!"); else if (!connected || 错误) println("OBSERVER: (error.localizedDescription), 连接失败!");
【讨论】:
代码甚至不需要返回语句。不幸的是,您在此处粘贴的代码会引发相同的编译错误,没有返回语句的闭包也会引发相同的编译错误(根据 swift 文档,该闭包隐含为“-> ()”)。【参考方案2】:看起来闭包参数是错误的
(origin: String!, connected: Bool!, error: PNError!) in
连接的参数应该是 Bool 类型,而不是显式展开的可选 Bool。
(origin: String!, connected: Bool, error: PNError!) in
强迫者应该投诉的。你应该发布到雷达。
【讨论】:
以上是关于没有有意义的错误的快速尾随关闭失败的主要内容,如果未能解决你的问题,请参考以下文章