快速尝试问号

UrK*_*UrK 3 syntax exception try-catch swift

我在我维护的代码中看到以下内容:

func parse(values: NSMutableDicationary) {
    let data = try? JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions())
}
Run Code Online (Sandbox Code Playgroud)

注意该方法不会标记为抛出任何东西,也不会处理错误.代码确实使应用程序崩溃了.

我想弄清楚try?(尝试用问号)意味着什么.

谷歌搜索或StackOverflowing没有返回任何有用的信息.

那么,try?Swift的意思是什么?

Dáv*_*tor 10

如果标记try带有问号的try?,则抛出函数的返回值将是可选的.这将是nil函数抛出一个错误(因此Swift返回一个nil而不是抛出错误,因此你不需要一个do-catch块)或者它将是函数的包装返回值,以防没有抛出错误.

这就是你可以模仿自己函数中的行为的方法:

func parse(values: NSMutableDicationary)->Data?{
    do {
        return try JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions())
    } catch {
        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)

这基本上与以下相同:

func parse(values: NSMutableDicationary)->Data?{
    return try? JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions())
}
Run Code Online (Sandbox Code Playgroud)