gpt4 book ai didi

swift - EXC_BAD_INSTRUCTION 尝试从 Swift 4 do-try-catch 打印错误时,跳过指定的 catch 条件

转载 作者:行者123 更新时间:2023-11-30 11:39:46 25 4
gpt4 key购买 nike

我正在 try catch 我的自定义错误,但由于某种原因,我的 catch 语句中我命名了我知道正在抛出的错误,它会跳过这些错误,转到默认捕获,然后给我一个 EXC_BAD_INSTRUCTION (代码=EXC_I386_INVOP, subcode=0x0) 当我尝试执行 print("意外错误\(error)")

这是一些缩写代码:

这是我在文件中声明的错误,该文件包含我调用该方法的类(该类称为 CC8DB):

public enum CC8RSVPError: Error {
case noEventOnDate
case invalidRSVPValue
}

我有一个方法声明为:

public func rsvpForEvent(_ inEventDate:Date?, forUserID inUserID:String, withValue inRSVPValue:String) throws -> CC8RSVPStatus

在另一个类中,如果我调用这个方法,我有这个:

do {
let rsvpResponse = try self.cc8DB.rsvpForEvent(inRSVPDate, forUserID: String(inMessage.author.id.rawValue), withValue: inRSVPValue);
...(other code to do when this doesn't fail)...
} catch CC8RSVPError.invalidRSVPValue {
...(Report specific error to user)...
} catch CC8RSVPError.noEventOnDate {
...(Report specific error to user)...
} catch {
...(Report general error to user)...
print("Error doing RSVP: \(error)");
}

最后,在 CC8DB.rsvpForEvent() 方法中,我触发了一个执行此操作的错误:

throw CC8RSVPError.invalidRSVPValue;

该方法的相关部分是:

public func rsvpForEvent(_ inEventDate:Date?, forUserID inUserID:String, withValue inRSVPValue:String) throws -> CC8RSVPStatus
{
var retStatus = CC8RSVPStatus(eventDate: nil, previousRSVP: "", newRSVP: "");
var upperRSVPValue:String = inRSVPValue.uppercased();
if (["YES", "MAYBE", "NO"].contains(upperRSVPValue)) {
//...(Code to do things when the info is correct)...
} else {
throw CC8RSVPError.invalidRSVPValue;
}

return retStatus;
}

对于我看到的测试用例,inRSVPValue 是“bla”,以测试当用户未输入有效状态值时会发生什么。

我看到的是,它不是进入特定于 CC8RSVPError.invalidRSVPValue 情况的 catch ,而是进入一般的 catch。此外,我在尝试打印 error 值的行上收到 EXC_BAD_INSTRUCTION。我已经单步执行它来验证我确实击中了我认为的 throw 行,并且我可以在调试器中看到 error 的值为 CC8DB.CC8RSVPError.invalidRSVPValue,但即使我尝试从 lldb 命令执行 po error,我也会收到相同的异常错误。

有没有人看到过这个或者知道我可以做些什么来使 do-try-catch 无法正常工作?

最佳答案

您可以在 catch 语句内分配一个名为 error 的常量,并在 catch block 内读取该常量并找出如何处理它。

做类似的事情:

} catch let error {
switch error {
case CC8RSVPError.noEventOnDate:
// code
case CC8RSVPError.invalidRSVPValue:
// code
}
}

关于swift - EXC_BAD_INSTRUCTION 尝试从 Swift 4 do-try-catch 打印错误时,跳过指定的 catch 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49376439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com