没有有意义的错误的快速尾随关闭失败

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

强迫者应该投诉的。你应该发布到雷达。

【讨论】:

以上是关于没有有意义的错误的快速尾随关闭失败的主要内容,如果未能解决你的问题,请参考以下文章

WCF 捕获异常“服务器没有提供有意义的回复..”

如何捕捉数据库错误并将其转化为对业务层有意义的信息?

Laravel 4 - 如何获得有意义的错误

显示有意义的错误消息

Laravel `php artisan serve` 抛出没有意义的错误

如何在 web3.js 中正确使用还原原因在 UI 中显示有意义的错误消息