swift - 使用错误枚举的关联值和计算属性

标签 swift error-handling enums try-catch

我的错误是这样写的:

public enum ParseError: LocalizedError {
    case badURL(_ urlString: String)

    public var errorDescription: String? {
        switch self {
        case .badURL:
            return String.invalidURL
        }
    }
}

因为我只有一种情况,所以我不关心在我的调用代码中创建多个模式:

    do {
        let url = try urlString.constructURL()
        UIApplication.shared.open(url)
    } catch {
        Alert().showError(error.errorDescription, subTitle: urlString) // trying to get the associated value here
    }

我想做这样的事情:

catch let error = error as ParseError(let urlString)

但显然,这是不可能的。如何获取枚举本身的值及其在语句中的关联值?

最佳答案

我唯一能想到的方法是在错误类型中添加一个urlString属性,

extension ParseError {
    var urlString: String? {
        switch self {
        case .badURL(let x): return x
        }
    }
}

然后像这样捕获错误:

do {
    let url = try urlString.constructURL()
    UIApplication.shared.open(url)
} catch let error as ParseError {
    Alert().showError(error.errorDescription, subTitle: error.urlString)
}

关于swift - 使用错误枚举的关联值和计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57517177/

相关文章:

ios - 检查是否使用 QuickAction 打开了 ViewController

macos - Prolog错误的编译?

c++ - 类中的枚举是静态的吗?

java - 枚举值的构造顺序

php - 在不使用 try/catch 的情况下,如何在 PHP 中使用 fopen 时捕获 "permission denied"错误?

C# 枚举排除

swift - 检测最大化/最小化窗口事件并以编程方式执行

swift - 在表格 View 单元格中键入时键盘会覆盖 TextView

swift - 当子类中有覆盖函数时如何转换为父类(super class)

json - 处理功能异常