2017-05-26 46 views
0

我正在处理一个我已经实现了do-try-catch子句的类。 基本问题是,经过“尝试”的代码,即使尝试失败得到了执行:Swift Do Try Catch行为

Do{ 
try jsonparshing(mydata) 
code.... 
}catch{ 
alert("error") 
} 

是否正确定位代码尝试后? 如果尝试失败,我不希望此代码得到执行。

+1

如果'try'失败,执行到'catch'。失败的'try'后面的代码没有被调用。 – rmaddy

+0

如果方法失败,该方法真的会抛出一个错误吗? – vadian

回答

0

这里是我会做调试行为的步骤:

(1)贵 'jsonparshing(MYDATA)' 真摔?
1.a.你可以检查throws关键字的'jsonParsing(_ :)'的类型。

1.b.或者你可以尝试省略'do {} catch {}'和'try'以查看Xcode是否抱怨函数抛出并且应该使用try。

// btw。是一个错字?也许'jsonParsing(myData)'更加自定义。 (2)假设你过去登记(1)。即该功能真的扔了。然后你可以用模拟替换你的'jsonParsing(_ :)',只是为了说服你自己Swift的'do catch {}'确实有效。代码中可能有其他可能导致意外行为的其他内容。

enum SimpleError: Error { 
    case userError(msg: String) 
    case systemError(msg: String) 
} 

func alwaysThrow() throws ->() { 
    throw SimpleError.userError(msg: "I create error!") 
} 


do { 
    print("before throw") // printed 
    try alwaysThrow() 
    print("after throw") // not printed 
} catch { 
    print(error)  // print: "userError("I create error!")\n" 
} 

(三)在这一点上,如果它不是一个用户/编程错误,那么你的注意力集中在“jsonParsing(_ :)”,因为在这里的罪魁祸首是。