我想在SWIFT中做一些我在其他多种语言中习惯做的事情:抛出带有自定义消息的运行时异常.例如(在Java中):

throw new RuntimeException("A custom message here")

我知道我可以抛出符合ErrorType协议的枚举类型,但我不想为抛出的每一种类型的错误定义枚举.理想情况下,我希望能够尽可能地模仿上面的示例.我考虑创建一个实现ErrorType protocol的自定义类,但我甚至不知道该协议需要什么.pip ?

推荐答案

最简单的方法可能是定义one个自定义enum,其中只有一个case附加了String:

enum MyError: ErrorType {
    case runtimeError(String)
}

或者,从Swift 4开始:

enum MyError: Error {
    case runtimeError(String)
}

示例用法如下:

func someFunction() throws {
    throw MyError.runtimeError("some message")
}
do {
    try someFunction()
} catch MyError.runtimeError(let errorMessage) {
    print(errorMessage)
}

如果您希望使用现有的Error个类型,最通用的类型是NSError,您可以创建一个工厂方法来创建并抛出一个带有自定义消息的类型.

Ios相关问答推荐

连接一些字符串,每个字符串都应该可以在swiftUI中单独点击

如何创建自定义组件来接受(和传递)所有可能的Textfield参数?

SWIFT根据地球坐标修改 node 旋转

SWIFT用户界面检测手势的开始和结束

以编程方式更改VC&39;S导航栏按钮的属性,以响应另一个VC中的按钮按下

在SwiftUI中插入绘制重复形状

iphone 11 和 iphone 12 对于相同的布局显示不同的结果

在 Android 和 iOS 应用程序上下文中阻止后台线程有哪些缺点?

如何在用户点击的位置使用SceneKit渲染球体?

@Query与SwiftData数据列表绑定

如何在 SwiftUI 视图中显示协议视图?

expo EAS build (iOS) 在 Pod 安装步骤中失败 (SDK45 & 46)

将视图(例如 Text())不透明度设置为 0 或将背景设置为 Color.clear 会导致它不被绘制

为什么我的应用在 Testflight 中没有下载 dSYM 按钮?

UICollectionView - 水平滚动,水平布局?

如何在键盘上方添加工具栏?

应用程序不包含正确的测试版权利

如何使用 AFNetworking 设置超时

NSURL 到带有 XCTest 的测试包中的文件路径

Xcode中的终端窗口?