当前位置: 首页 > 面试题库 >

武力真的很糟糕,应该经常避免吗?

范嘉
2023-03-14
问题内容

我开始使用swiftLint,并注意到Swift的最佳实践之一是避免强制施放。但是我在处理tableView,cell的collectionView时经常使用它:

let cell = collectionView.dequeueReusableCellWithReuseIdentifier(cellID, forIndexPath: indexPath) as! MyOffersViewCell

如果这不是最佳实践,那么处理此问题的正确方法是什么?我猜我可以使用if with as ?,但这是否意味着在其他情况下我需要返回一个空单元格?可以接受吗?

if let cell = collectionView.dequeueReusableCellWithReuseIdentifier(cellID, forIndexPath: indexPath) as? MyOffersViewCell {
      // code
} else {
      // code
}

问题答案:

这个问题可能是基于观点的,所以我的回答有些含糊,但是我不会说强制降压 总是 不好的。您只需要考虑语义以及在给定情况下的语义。

as! SomeClass是一个合同,它基本上说“我保证这件事是SomeClass的一个实例”。如果事实证明它不是SomeClass,则将因为您违反合同而引发异常。

您需要考虑使用此合同的环境,以及如果不使用强制降价可以采取什么适当的措施。

在您给出的示例中,如果dequeueReusableCellWithIdentifier 没有
给出a,MyOffersViewCell则可能是您对单元重用标识符进行了错误配置,并且异常将帮助您发现该问题。

如果您使用了条件下调,那么您将得到零,并且必须以某种方式进行处理-
记录一条html" target="_blank">消息?抛出异常?它肯定代表着不可恢复的错误,是您在开发过程中想要找到的错误。发布后,您就不必再处理了。您的代码不会突然开始返回不同类型的单元格。如果只是让代码在强制向下转换时崩溃,它将直接指向发生问题的行。

现在,考虑一种情况,您正在访问从Web服务检索到的JSON。Web服务中可能存在无法控制的更改,因此,更优雅地处理此问题可能会很好。您的应用可能无法运行,但至少您可以显示警报,而不仅仅是崩溃:

不好-如果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
}


 类似资料:
  • 问题内容: 我读到应该避免赞成和。我对弄乱Loop并没有信心,也没有完全理解Codex。 下面的代码是否使用?如果是,并且由于应该避免,那么您能建议一种不使用但仍然完成相同任务的方法吗? 此代码用于按随机或按价格对帖子进行排序。 。 使用此代码将链接A(随机)和链接B(价格)发布在我的菜单中。因此,网站的访问者只需单击链接即可对帖子进行排序。 问题答案: 我已经针对WPSE这个主题做了非常详细的解

  • 我正在测试简单拓扑以检查Kafka喷口的性能。它包含kafka spout和Bolt来确认每个元组。Bolt执行方法: 拓扑结构如下所示: 其他拓扑设置: 我在10分钟内得到了1.5kk元组。螺栓的性能约为0,5。所以我的逻辑很简单:如果我双倍喷注和螺栓并行提示-我将得到双倍的性能。下一个测试是1个工人2个Kafka喷口,2个简单的夹子螺栓和Topology.Acker.Executors=2。以

  • 在我第一次使用JavaFX时,场景被错误地显示,我没有找到原因。例如,在E(fx)clipse页面的第一个基本教程中提出了以下代码: 它应该显示文本“Hello FX”,但显示以下内容: 我的Java版本是适用于Windows 64(Win 7)的8u65。

  • 译者注:该小结关于错误处理的观点,译者并不完全赞同,关于本小结的部分想法请参考关于16.10.2小节错误处理的一些见解 依附于第13章模式的描述和第17.1小节与第17.2.4小节的总结。 16.10.1 不要使用布尔值: 像下面代码一样,创建一个布尔型变量用于测试错误条件是多余的: var good bool // 测试一个错误,`good`被赋为`true`或者`false`

  • 一进去,面试官迟到,等了近十分钟,面试官到了,开始面试 先狂问我的毕设,具体到其中的算法实现。由于算法不是自己写的,具体细节并不了解,就只能说不会,然后就被质疑是不是自己做的,在毕设中担任了什么工作,怎么具体细节都不清楚,我只能说是使用了别人做的算法包,具体实现细节不是特别清楚 之后开始正式的java坐牢环节 一上来直接问我用的jdk版本,我说了jdk8,然后居然问我为什么用jdk8。我直接一脸问

  • 问题内容: 我不是PHP开发人员,但我在很多地方都看到人们似乎把它当作瘟疫之类。为什么? 问题答案: 表示通过GET或POST传递的所有变量都可以作为脚本中的全局变量使用。由于访问未声明的变量不是PHP中的错误(这是警告),因此可能导致非常讨厌的情况。考虑一下,例如: 这本身不是一件坏事(精心设计的代码不应生成警告,因此不应访问可能未声明的变量(并且出于相同原因也不 需要 )),但是PHP代码通常