2016-09-28 46 views
23

抛出斯威夫特3之前我用的是:处理尝试和斯威夫特3

guard let data = Data(contentsOf: url) else { 
       print("There was an error!) 
       return 
      } 

但是我现在必须使用dotrycatch。我不熟悉这个语法。我将如何复制这种行为?

回答

70

这里的区别是Data(contentsOf: url)不会返回一个Optional,它会抛出。

所以,你可以在你的副渔获,但没有guard使用它:

do { 
    let data = try Data(contentsOf: url) 
    // do something with data 
    // if the call fails, the catch block is executed 
} catch { 
    print(error.localizedDescription) 
} 

请注意,您仍然可以使用guardtry?代替try但随后可能出现的错误信息被忽略。在这种情况下,您不需要Do-Catch块:

guard let data = try? Data(contentsOf: url) else { 
    print("There was an error!") 
    // return or break 
} 
// do something with data 
+2

感谢您的支持!第二个例子正是我要找的! – KexAri

+0

@Moritz有没有办法将错误消息添加到else子句中? – eonist

+0

@GitSync不是用'try?',不是。你需要Do-Try-Catch来获取错误信息。 – Moritz