我在我维护的代码中看到以下内容:
func parse(values: NSMutableDicationary) {
let data = try? JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions())
}
注意该方法不会标记为抛出任何内容,也不会处理错误。代码确实使应用程序崩溃。
我试图找出try?
(尝试使用问号)的含义。
谷歌搜索或StackOverflowing没有返回任何有用的信息。
那么,try?
在Swift中意味着什么?
答案 0 :(得分:10)
如果您将try
标记为try?
,则throwable函数的返回值将是可选的。如果函数抛出错误,那么它将为nil
(因此Swift返回nil
而不是抛出错误,因此您不需要do-catch
块)或者它将会是没有抛出错误的函数的包装返回值。
这就是你可以模仿自己函数中的行为的方法:
func parse(values: NSMutableDicationary)->Data?{
do {
return try JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions())
} catch {
return nil
}
}
这基本上与:
相同func parse(values: NSMutableDicationary)->Data?{
return try? JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions())
}
答案 1 :(得分:2)
从苹果文档中,试试?通过将其转换为可选值来处理错误。如果在评估try时抛出错误?表达式,表达式的值为nil。
结果是两个中的一个:
一个。抛出错误,data
为零,尝试使用数据变量导致崩溃
B中。 try?
没有捕获抛出的错误,由于某种原因在异步运行的函数中发生了很多错误
答案 2 :(得分:2)
<强>尝试吗
它返回一个可选的解包成功值,并通过返回nil捕获错误。当您尝试仅使用try?
和true
发现
false
使用try?
你不能除了为什么(理由)这会失败。
func parse(values: NSMutableDicationary) {
//It return only exacat value Data or nil.
if let data = try? JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions()) {
//Perform operation with data
}
}