let cell = collectionVIEw.dequeueReusableCellWithReuseIDentifIEr(cellID,forIndexPath: indexPath) as! MyOffersVIEwCell
如果这不是最好的做法,那么正确的处理方法是什么?我想我可以使用,如果让我们,但这是否意味着其他条件我将需要返回一个空单元格?这可以接受吗
if let cell = collectionVIEw.dequeueReusableCellWithReuseIDentifIEr(cellID,forIndexPath: indexPath) as? MyOffersVIEwCell { // code} else { // code}这个问题大概是以意见为基础的,所以我用一粒盐来答复我,但是我不会说强制下降总是坏的;您只需要考虑语义,以及在特定情况下如何应用.
如! SomeClass是一个合同,它基本上说“我保证这个东西是SomeClass的一个实例”.如果事实证明它不是SomeClass,那么将会抛出异常,因为你违反了合同.
您需要考虑使用此合约的上下文以及如果您没有使用强制下放,您可以采取何种适当措施.
在您给出的示例中,如果dequeueReusableCellWithIDentifIEr不给您一个MyOffersVIEwCell,那么您可能错误地配置了与单元重用标识符有关的一些功能,并且异常会帮助您找到该问题.
如果你使用了一个有条件的downcast,那么你将要消失,不得不处理 – 记录一个消息?抛出异常?它确实代表了一个不可恢复的错误,并且您希望在开发过程中找到它;你不会期望在发布后不得不处理.你的代码不会突然开始返回不同类型的单元格.如果你只是让代码崩溃的力量downcast它将直接指向出现问题的行.
现在,考虑一个您正在访问从Web服务检索的JsON的情况. Web服务可能会发生变化,这是您无法控制的,因此更优雅的处理可能会很好.您的应用可能无法运行,但至少您可以显示警报,而不是简单地崩溃:
BAD – 如果JsON不是数组,则会崩溃
let someArray=myJsON as! NSArray ...
更好 – 处理带有警报的无效JsON
guard let someArray=myJsON as? NSArray else { // display a UIAlertController telling the user to check for an updated app.. return}总结
以上是内存溢出为你收集整理的swift – 强制施法真的很糟糕,应该总是避免吗?全部内容,希望文章能够帮你解决swift – 强制施法真的很糟糕,应该总是避免吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)