如何解决为什么我的for-in循环不起作用?迅速处理错误
我尝试了一个错误处理函数来破解保险箱的代码(例如),在我看来,for-in循环应该打印出数组中的所有尝试... 但事实是,只有数组的第一个String会被打印,而其他的则不是。谁能告诉我我的失败在哪里?
enum SafeError: Error {
case wrongCode
case tooMuchTries
case safeIsOpen
}
struct Safe {
var safeIsclosed: Bool
var code: String
var maximumTries: Int
mutating func OpenSafe(triedCodes: [String]) throws {
guard safeIsclosed else {
throw SafeError.safeIsOpen
}
for triedCode in triedCodes {
print("Try \(triedCode)")
guard triedCode == code else {
throw SafeError.wrongCode
}
}
guard triedCodes.count <= maximumTries else {
throw SafeError.tooMuchTries
}
print("Password was correct")
}
}
var safe = Safe(safeIsclosed: true,code: "WD1146",maximumTries: 5)
do {
try safe.OpenSafe(triedCodes: ["DD377789","123456","WD1146","112378AADD","DDFG4567"])
} catch SafeError.safeIsOpen {
print("Safe is already open")
} catch SafeError.tooMuchTries {
print("Safe is closed Now,your try was wrong")
} catch SafeError.wrongCode {
print("Wrong Password")
} catch {
print("Error")
}
谢谢!
解决方法
从函数调用throw
会立即终止该函数的执行。这意味着一旦triedCodes
的第一个元素错误,函数就会终止,因为抛出了.wrongCode
错误。
我建议您修改函数,以便检查triedCodes
数组中是否包含正确的代码,并在错误的情况下引发错误。这样可以确保在引发错误之前检查整个数组。
mutating func openSafe(triedCodes: [String]) throws {
guard safeIsclosed else {
throw SafeError.safeIsOpen
}
guard triedCodes.contains(code) else {
throw SafeError.wrongCode
}
guard triedCodes.count <= maximumTries else {
throw SafeError.tooMuchTries
}
}
,
一旦遇到第一个异常,便会退出循环。
尝试像这样更改结构:
struct Safe {
var safeIsclosed: Bool
var code: String
var maximumTries: Int
func OpenSafe(triedCode: String) throws {
guard safeIsclosed else {
throw SafeError.safeIsOpen
}
print("Try \(triedCode)")
guard triedCode == code else {
throw SafeError.wrongCode
}
}
mutating func OpenSafe(triedCodes: [String]) throws {
guard safeIsclosed else {
throw SafeError.safeIsOpen
}
for triedCode in triedCodes {
do {
try safe.OpenSafe(triedCode: triedCode)
} catch SafeError.safeIsOpen {
print("Safe is already open")
} catch SafeError.wrongCode {
print("Wrong Password")
} catch {
print("Error")
}
}
guard triedCodes.count <= maximumTries else {
throw SafeError.tooMuchTries
}
print("Password was correct")
}
}
我现在无法对其进行测试,因此可能会出现语法错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。