Swift:NSError 现在应该被视为遗留问题吗?

2024-04-28

文档和流行博客建议使用 do-catch 进行 Swift 错误处理,并处理 ErrorType 枚举或 NSError 实例。

ErrorType 枚举和 NSError 实例在 try catch 块中是否互斥?如果没有,如何实现一个同时抛出两者的函数?

我已将 NSError 实例关联到枚举,如下所示,这似乎有效,但这是否是返回详细错误信息的事实上的方式?

enum Length : ErrorType {
    case NotLongEnough(NSError)
    case TooLong(NSError)
}

func myFunction() throws {
    throw Length.NotLongEnough(NSError(domain: "domain", code: 0, userInfo: [NSLocalizedFailureReasonErrorKey: "Not long enough mate"]))
}

do {
    try myFunction()
} catch Length.NotLongEnough(let error) {
    print("\(error)")
}

此示例展示了如何将 ErrorType 转换为 NSError。

do {
    let str = try NSString(contentsOfFile: "Foo.bar",
                           encoding: NSUTF8StringEncoding)
}
catch let error as NSError {
    print(error.localizedDescription)
}

我找不到符合 NSString ErrorType 的错误枚举,所以我们应该假设它将是一个 NSError 实例吗?当然,我们可以肯定地运行代码,但文档肯定应该让我们知道。 (我很高兴我可能误读了文档)


任何 ErrorType 都可以成功转换为NSError,这意味着如果您想要将 ErrorType 作为优先级处理,或者特定的 ErrorType 符合 Swift 类型,那么您应该在转换为的情况之前有这些情况NSError(这将再次为所有人带来成功ErrorType符合蚂蚁类型)。

我不确定苹果现阶段是否就如何处理这种二元性表达了任何规范的意见,但我个人尝试坚持ErrorType使 Swift 类型符合我自己的错误,并且只涉及强制转换NSError当我想基于某些 Cocoa 或第 3 方做出条件行为时NSError基于代码,其中域和代码组合对我的逻辑有意义(例如,如果可以从日志记录或响应中过滤掉特定错误)。

Swift 中现有的错误处理工具的问题主要是由于无法判断方法抛出的错误类型,以及ErrorType缺乏一些关键的上下文信息NSError每次您想要展示时都可以提供额外的定制工作ErrorType以某种方式出现在用户界面中。与 NSError 不同,ErrorType 没有办法传递 UI 预期信息,例如“原因”、“恢复建议”或“描述”。看来 Swift 3 还没有解决这个问题(最近在 Swift 开发邮件列表上对此进行了一些讨论)。

关于“我找不到符合 NSString ErrorType 的错误枚举”,我真的不确定我是否正确理解了这个短语,或者它的整体措辞是否正确,但也许以下内容是相关的:

我个人遵循制定我的惯例ErrorType实施CustomStringConvertible并使用description属性来描述人类(UI 意图)可读的错误描述。这绝不是完美的,尤其是在 OSX 上NSResponder足够好给你presentError如果您填写描述和恢复建议信息,该方法会生成一个非常漂亮且清晰的错误对话框。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift:NSError 现在应该被视为遗留问题吗? 的相关文章

  • Iphone safari 无法在键盘打开时调整视口大小

    当键盘弹出时 Mobile safari 不会更新 window innerHeight 至少在9 3 5中 并且有几个答案 例如this https stackoverflow com a 17604856 2423187一 有评论说在
  • Swift iOS 9.2 中的每日本地通知

    尝试快速发送每日本地通知 然而 由于某种原因 它只是每分钟发送一次 我希望第一个通知在应用程序打开后 30 分钟发送 然后每天重复此通知 在 swift fie 中我有以下代码 每日通知代码 同时在应用程序委托中添加部分 让 Date NS
  • UITableViewCellDeleteConfirmationControl 问题

    我在项目中使用以下代码 if NSStringFromClass subview class isEqualToString UITableViewCellDeleteConfirmationControl 这在 iOS 5 和 6 上运行
  • SwiftUI 转义闭包捕获变异的“self”参数

    我有一个可以通过两种方式打开的视图 一个包含提供给它的数据 另一个包含对 Firestore 文档的文档引用 我创建了两个构造函数 在第一个构造函数中我提供数据 在另一个构造函数中我提供文档参考 然后我使用此引用进行网络调用 但出现错误 E
  • MPMoviePlayerViewController,删除 Quicktime 符号/添加背景图像?

    我有一个播放音频的 MPMoviePlayerViewController 我想删除 Quicktime 徽标和 或向播放器添加自定义背景图像 但保留播放控件 我发誓我在 iOS 5 之前就已经这样做过 但我无法重新弄清楚 我尝试过的事情
  • iOS - 基于设备的不同图像或缩放相同的图像?

    似乎开发人员总是为不同的设备创建不同的图像资源 并根据设备加载它们 但是 只为最高分辨率的设备 iPad 创建图像 然后为 iPhone 6 5 等缩小该图像 有什么缺点吗 我使用 SpriteKit 因此我只需创建不同大小的 SKSpri
  • 如何执行条件segue

    我通过 IB 创建了一个 segue 单击按钮时 将转换到视图 A 在按钮单击操作中 我有performSegue withIdentifier sender 包裹在一个条件中 我希望仅当条件为真时才发生 segue 但是 一旦用户单击按钮
  • 如何缓存单元格并重用每个单元格中嵌入了 avplayers 的集合视图中的单元格?

    基本上我想做的是缓存单元格并让视频继续播放 当用户滚动回到单元格时 视频应该只从播放的位置显示 问题是玩家被移除并且单元格最终出现在随机单元格上 而不是其指定区域 您需要有两个视频才能正常工作 我从这里下载了视频https commonda
  • UICollectionView 装饰和补充视图无法移动

    In UICollectionView装饰和补充意见似乎是一个很大的谜团 目前似乎几乎没有示例代码 我设法让这两种类型在自定义布局中工作 请参阅此post https stackoverflow com questions 12810628
  • 在 iOS 中获取 Facebook 好友时出错

    我正在尝试获取登录用户的 Facebook 好友列表 它在我的帐户中工作正常 但是当我将应用程序详细信息迁移到新帐户并更改应用程序 ID 和应用程序密码时 我收到以下错误 Error Domain com facebook sdk Code
  • 如何在 Swift 中更改 UIButton 图像

    我正在尝试使用 Swift 更改 UIButton 的图像 我应该怎么办 这是 OBJ C 代码 但我不知道 Swift 的情况 playButton setImage UIImage imageNamed play png forStat
  • 使用 popToRootViewController 时我丢失了导航栏

    我有一个 iOS 应用程序 其中主屏幕是 UICollectionViewController 从集合视图中选择项目时 视图将推送到该项目的详细信息视图 在细节视图中 我构建了一个从侧面移出的抽屉 滑块 为了让视图看起来像我想要的那样 我隐
  • 从 Xcode 6 安装失败:“存在内部 API 错误”

    我尝试在 ipad ios 7 1 2 上运行一个在我的手机 ios 8 4 1 上运行良好的应用程序 Xcode 提示 存在内部 API 错误 仅此而已 我不确定如何解释日志 怎么了 我该如何解决 ipad日志 Aug 29 17 39
  • 如何使用CAAnimation制作曲线/圆弧动画?

    我有一个用户界面 其中一个项目被删除 我想模仿 iOS 邮件中的 移动到文件夹 效果 小字母图标被 扔 到文件夹中的效果 我的会被扔进垃圾箱 我尝试使用它来实现它CAAnimation在图层上 据我在文档中阅读 我应该能够设置byValue
  • 如何在 Objective-C 标头中引用 Swift 枚举

    有没有办法从 Objective C 标头引用 Swift 枚举 如果你想在 Objective C 头中查看 Swift 类 你可以使用 objc class Foo 我没有看到枚举有任何类似的东西 你想做的事情叫做forward dec
  • 允许在 Safari 上聊天应用程序使用 audio.play()

    由于苹果禁用了自动播放音频的功能HTMLMedia Element play https developer mozilla org en US docs Web API HTMLMediaElement play在没有用户交互的 java
  • MapKit 注释未显示在地图上

    我无法让 MKAnnotationViews 显示在 MapKit 的地图上 我正在使用 iOS 7 现在已经在论坛和网络上搜索了很多小时 尝试不同的示例和设置 下面我有 我认为 使其工作的最基本的设置 该应用程序包含一个 ViewCont
  • JavaScript 与 WKWebView 的同步本机通信

    使用 WKWebView 可以在 JavaScript 和 Swift Obj C 本机代码之间进行同步通信吗 这些是我尝试过但失败的方法 方法 1 使用脚本处理程序 WKWebView接收JS消息的新方式是使用委托方法userConten
  • 呈现 UIActivityViewController 时发出警告

    当我提出一个UIActivityController使用我得到的下面的代码 它被呈现 但控制台显示 Warning Attempt to present
  • Swift 如何格式化带有千位分隔符的大数字?

    有没有一个简单的命令可以将 1 60543e 06 格式化为 1 605 436 resultFV text String localizedStringWithFormat f fv 不明白 在斯威夫特 3 中 NumberFormatt

随机推荐

  • Scala 恢复或recoverWith

    我们公司正在用Scala开发一些系统 我们有一些疑问 我们正在讨论如何映射未来的异常 但我们不知道何时应该使用选项 1 或选项 2 val created Future 选项1 val a created recover case e da
  • 具有运行空间池的 SessionStateProxy 变量

    我想在 PowerShell 中使用运行空间池来执行后台操作 但我需要从主线程访问 WPF 窗口变量 普通运行空间有以下选项 runspace SessionStateProxy SetVariable xamGUI xamGUI 但是我如
  • 内容更改时 DataGridView 样式不更新

    好的 这是我的情况 我有一个DataGridView含有Messages 应用以下样式
  • 计算具有不均匀间隔点的 3D 梯度

    我目前有一个由几百万个不均匀间隔的粒子组成的体积 每个粒子都有一个属性 对于那些好奇的人来说是潜力 我想计算其局部力 加速度 np gradient 仅适用于均匀分布的数据 我在这里查看 numpy 中的二阶梯度 https stackov
  • Python 和 Scipy:如何拟合冯·米塞斯分布?

    我正在尝试拟合来自 scipy 的冯 米塞斯分布 http docs scipy org doc scipy reference generated scipy stats vonmises html http docs scipy org
  • ValueError:无法解释优化器标识符:

    我尝试运行此代码 但出现此错误 请任何人过去也遇到过相同的错误 sgd optimizers SGD lr 0 01 decay 1e 6 momentum 0 9 nesterov True 编译模型 model compile opti
  • IE 中“对象不支持属性或方法‘查找’”

  • 如何在java中将ojalgo稀疏数组存储到文件中?

    我目前有一个 SparseStore 矩阵 我在其中执行大量计数和计算 我想将其存储到文件中 以便以后可以重复使用它 而无需重新执行之前的所有计算 我尝试了 Java 中的基本序列化 ObjectOutputStream outputStr
  • 滚动文件实现

    我一直很好奇滚动文件是如何在日志中实现的 如何开始用任何语言创建一个文件写入类 以确保不超过文件大小 我能想到的唯一可能的解决方案是 write method size file size size of string to write i
  • python 正则表达式 - 列表中的 re.findall()

    这是我的清单 lista u REG S 3 UMTS 0 0 RNC u REG S 3 UMTS 0 1 RNC u REG S 3 UMTS 0 2 RNC u REG S 2 GSM NORT CBSP bsc 0 0 BSC u
  • 无法从 JAR 文件加载主类

    我有一个 Spark scala 应用程序 我尝试显示一条简单的消息 Hello my App 当我编译它时sbt compile并运行它sbt run没关系 我成功显示了我的消息 但他显示了错误 像这样 Hello my applicat
  • 在 ant 脚本中包含外部 JAR 时出错

    这是我第一次尝试编写 ANT 脚本 这是我使用 Spring 构建的简单 Hello World 应用程序的 build xml
  • 如何找到具有特定字符串但不在注释中的代码

    我试图在 1 000 个存储过程和函数中搜索特定字符串 在本例中为电子邮件地址 但当它位于注释块中时我想忽略它 这是查找对象的 SQL 语法 但有数百个结果 我不想遍历每个结果来确定电子邮件地址是在代码中使用还是仅在注释块中使用 SELEC
  • MySQL ORDER BY rand(),名称 ASC

    我想获取一个包含 1000 个用户的数据库并随机选择 20 个用户 ORDER BY rand LIMIT 20 然后按名称对结果集进行排序 我想出了以下查询not像我希望的那样工作 SELECT FROM users WHERE 1 OR
  • 使用 Excel 从 Lotus Notes 发送电子邮件并具有附件和 HTML 正文

    是的 我正在尝试通过 Lotus Notes 发送 Excel 电子表格的电子邮件 它有一个附件 并且正文需要采用 HTML 格式 从我读过的所有代码来看 我有一些代码应该允许我这样做 但事实并非如此 如果没有 HTML 正文 附件将发送
  • 如何从电子表格加载特定工作表

    我有一个包含很多工作表的电子表格 我需要加载其中一张工作表 我该怎么做 Here is a photo of the sheets in my Spreadsheet 这是我的想法如何做到这一点 var sheet SpreadsheetA
  • 如何分配二维数组? [复制]

    这个问题在这里已经有答案了 我需要创建一个二维数组 目前我将其创建为int a 100 100 但我需要使用动态分配内存malloc在C语言中 我用了代码 include
  • AWS SAM CLI 在构建、打包和部署期间忽略我的 Python 依赖项

    我正在尝试使用 MacOS 中的 SAM CLI 工具部署 AWS Lambda 函数 而不是使用 Docker 容器 SAM CLI 版本 0 4 0 Lambda 函数的 Python 3 8 运行时 MacOS 上本地安装的 Pyth
  • LLVM 尾调用优化

    以下是我对事情的理解 当函数 f 调用自身是其最后一个动作时 它是尾递归的 通过形成循环而不是再次调用函数 可以显着优化尾递归 函数的参数已就地更新 并且函数体再次运行 这称为递归尾调用优化 LLVM 在使用 fastcc GHC 或 Hi
  • Swift:NSError 现在应该被视为遗留问题吗?

    文档和流行博客建议使用 do catch 进行 Swift 错误处理 并处理 ErrorType 枚举或 NSError 实例 ErrorType 枚举和 NSError 实例在 try catch 块中是否互斥 如果没有 如何实现一个同时