美文网首页
try? 与 as? 之间的优先级问题

try? 与 as? 之间的优先级问题

作者: 梁杰_numbbbbb | 来源:发表于2016-12-21 22:54 被阅读48次

作者:Erica Sadun,原文链接,原文日期:2016-12-15
译者:星夜暮晨;校对:Crystal Sun;定稿:CMB

Tim Vermeulen 最近在 Swift Evolution 列表上,写到 try? 的优先级非常地出人意料:

if let int = try? mightReturnInt() as? Int {
  print(int) // => Optional(3)
}

具体来说,他发现 try? 的优先级比 as? 的优先级低,所以需要添加括号,才能够获取正确的结果。

if let int = (try? mightReturnInt()) as? Int {
  print(int) // => 3
}

此外,他还发现在既会返回可空值、又会抛出错误的情形下,也存在类似的问题:

if let int = try? mightReturnInt() {
  print(int) // => Optional(3)
}

if let int = (try? mightReturnInt()) ?? nil {
  print(int) // => 3
}

对于 if let item = item as? T 而言,是可以自动对可空值进行提取的,但是似乎目前却没有应用到 try? 当中。如果遇到这种情况,请考虑如示例所示,添加括号或者使用空合运算符 (nil coalescing) 来解决这个问题。

如果您觉得这种既有可空值又有错误抛出的情形太「罕见」的话,那么可以想一想文件系统请求,可能会抛出一个错误「目录不可读」,也可能会在指定文件不存在的时候返回 nil。尽管这种情况比较少见,但是将 try?as? 结合起来使用的情形还是有可能出现的。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg

相关文章

  • try? 与 as? 之间的优先级问题

    作者:Erica Sadun,原文链接,原文日期:2016-12-15译者:星夜暮晨;校对:Crystal Sun...

  • nginx 配置静态文件

    [nginx try_files的理解] Nginx location的匹配规则 location 匹配优先级 示例

  • 哪个问题先解决?决定优先级

    发现问题后,哪个问题先解决?根据《麦肯锡问题分析与解决的技巧》提供的答案是:决定优先级,根据优先级来确定解决方式。...

  • 线程

    线程管理 线程创建 优先级管理 线程之间存在优先级问题,如下解决 线程同步 多个线程同时访问一段数据,会产生奇怪的...

  • Java的异常处理规则

    catch和finally不能没有try; try和catch之间不能有程序; try一定要有catch或者fin...

  • 错误和异常

    try语句按照如下方式工作:  1.首先,执行try子句(在关键字try和关键字except之间的语句)  2.如...

  • C运算符的优先级与结合性

    C语言运算符优先级与结合性:同一优先级的运算符,运算次序由结合方向所决定。 c语言运算符优先级存在的问题(按照常规...

  • try{}catch{}相关问题

    try{}catch{}相关问题 1 向上抛出exception与不抛出exception的区别 这样会打出exc...

  • try、try?、try!

    try: try与do-catch语句一起使用,并对错误进行详细处理。 try? try?用在错误无关紧要的时候,...

  • 读书笔记《麦肯锡问题分析与解决技巧》20171128

    问题的分类与优先级 根据目的与时间,将问题划分为三大类: 1) 恢复原状型(显在型问题):现在与过去的状态出现了落...

网友评论

      本文标题:try? 与 as? 之间的优先级问题

      本文链接:https://www.haomeiwen.com/subject/uukcvttx.html