迅速 – 强迫展开vs不

迅速 – 强迫展开vs不,第1张

概述Facebook最近更新了Parse以支持 Swift.它给出的代码示例之一是: var gameScore = PFObject(className: "GameScore")gameScore.setObject(1337, forKey: "score")gameScore.setObject("Sean Plott", forKey: "playerName")gameScore.s 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.
NSError?:这可能包含NSError或者它可能是nil,但它需要先解包.
NSError!:这是一个强制解包的NSError ?,因此不能为零.

Facebook的例子说成功是Bool!和错误是一个NSError! – 即,它们都是明确提供的.为什么他们不仅仅是作为Bool和NSError编写的,只要Facebook在发送它们之前解包它们?此外,如何设置成功和错误?传统使用NSError会说当没有问题时它会设置为nil.

解决方法 这可能是由于与Objective-C API的互 *** 作性.由于Objective-C中的任何对象都可以为nil,因此在Swift中这两个值必须是可选的.

无论如何 – 因为显然他们保证那些对象永远不会是零 – 他们可以隐含地打开它们,允许使用这个API的人保存一些unwraps,这很好.

关于你的陈述

Traditional use of NSError would say that it’s set to nil when there’s no problem.

即使在Objective-C中,这也是错误的.

Cocoa中的BOol / NSError模式指示您必须检查成功值以了解是否发生错误,并且 – 如果是这种情况 – 那么NSError将包含有关它的信息.

检查NSError是否为nil是这种模式的常见误用,它可能导致代码中出现逻辑错误,因为某些Apple API即使在成功的情况下也会返回非零错误.

总结

以上是内存溢出为你收集整理的迅速 – 强迫展开vs不全部内容,希望文章能够帮你解决迅速 – 强迫展开vs不所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1018740.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存