迅速 – 强迫展开vs不
Facebook最近更新了Parse以支持
Swift.它给出的代码示例之一是:
var gameScore = PFObject(className: "GameScore") gameScore.setObject(1337,forKey: "score") gameScore.setObject("Sean Plott",forKey: "playerName") gameScore.saveInBackgroundWithBlock { (success: Bool!,error: NSError!) -> Void in if success { NSLog("Object created with id: (gameScore.objectId)") } else { NSLog("%@",error) } } 我对这部分感到好奇:“(成功:Bool!,错误:NSError!)”,特别是惊叹号.我对选项的理解是这样的: NSError:这是一个NSError,不能为nil. Facebook的例子说成功是Bool!和错误是一个NSError! – 即,它们都是明确提供的.为什么他们不仅仅是作为Bool和NSError编写的,只要Facebook在发送它们之前解包它们?此外,如何设置成功和错误?传统使用NSError会说当没有问题时它会设置为nil. 解决方法
这可能是由于与Objective-C API的互操作性.由于Objective-C中的任何对象都可以为nil,因此在Swift中这两个值必须是可选的.
无论如何 – 因为显然他们保证那些对象永远不会是零 – 他们可以隐含地打开它们,允许使用这个API的人保存一些unwraps,这很好. 关于你的陈述
即使在Objective-C中,这也是错误的. Cocoa中的BOOL / NSError模式指示您必须检查成功值以了解是否发生错误,并且 – 如果是这种情况 – 那么NSError将包含有关它的信息. 检查NSError是否为nil是这种模式的常见误用,它可能导致代码中出现逻辑错误,因为某些Apple API即使在成功的情况下也会返回非零错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |