我对 swift3 中的错误处理感到困惑。我尝试像“如果 XX 函数出错然后尝试 YY 函数”那样做 让我向您展示我的尝试:
class MyClass {
enum error: Error
{
case nilString
}
func findURL() {
do {
let opt = try HTTP.GET(url_adr!)
opt.start { response in
if let err = response.error {
print("error: \(err.localizedDescription)")
return //also notify app of failure as needed
}
do
{
/* This is func1. and got error. I want to if this function has error then go next function. */
try self.stringOperation(data: response.description)
}
catch{
print("doesn't work on func1. trying 2nd func")
self.stringOperation2(data:response.descritption)
}
}
} catch let error {
print("got an error creating the request: \(error)")
}
}
func stringOperation(data:String)throws -> Bool{
do{
/** 1 **/
if let _:String = try! data.substring(from: data.index(of: "var sources2")!){
print("its done")
}else{
throw error.nilString
}
IN 1:我在这一行遇到了这个 fatal error : “ fatal error :在展开可选值时意外发现 nil”,程序崩溃。 我用谷歌搜索了错误处理,试图理解并应用到我的代码中。但是还没有成功。有人可以解释我哪里错了吗?
附加信息:我得到了 .substring(from:...) 和 .index(of:"str") 的字符串扩展名。所以这些行不会让您感到困惑。
最佳答案
作为一般规则,尽量避免使用强制解包(!),你有
if let _: String= try! data.substring...
改为使用
if let index = data.index(of: "var sources2"),
let _: String = try? data.substring(from: index) { ... } else { ... }
这样你就可以消除可能导致崩溃的两个力解包。您已经拥有用于捕获 nil 值的 if let
保护,因此您可以通过使用条件展开来充分利用它。
关于swift - 对 Swift 3 中的错误处理感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44997216/