我有一个通用的投掷方法:
func doSomething<T>() throws -> T? {
// do something
}
这就是我想要的方式:
let obj: SomeClass? = try? doSomething() // a compiler error!
但我可能不会。编译器给我一个错误
未展开的可选类型
'SomeClass??'
的值;您是指使用'try!'
还是使用'?'
链接?。
我可以使用try!
或try
代替。但我不喜欢前者,因为它可能会在某些时候崩溃应用程序,我不喜欢后者,因为它对于大多数情况来说太长了(一行变为五行)。
有人知道我如何继续使用try?
?
答案 0 :(得分:1)
您的方法返回一个可选项。 try?
表达式添加了另一个可选级别,因此您的预期返回值应该是双重可选:
let obj: SomeClass?? = try? doSomething()
将可选项和throws
的返回结合起来可能不是一个好主意。
您还可以使用??
删除第二级选项:
let obj: SomeClass? = (try? doSomething()) ?? nil
但我真的建议重新设计API而不是解决双重选项。