swift2 swift 2捕获为!失败错误

vs91vp4v  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(167)

有时如果我们使用as!来转换带有错误类型的对象会导致运行时错误。swift 2引入了try catch throw错误处理方式。那么,有没有一种方法可以用新的try catch方式来处理as!fail运行时错误

vsaztqbk

vsaztqbk1#

do try catch语句只用于处理抛出函数。如果要处理强制转换,请使用as?

if let x = value as? X {
  // use x
} else {
  // value is not of type X
}

或新的guard语句

guard let x = value as? X else {
  // value is not of type X
  // you have to use return, break or continue in this else-block
}
// use x
3bygqnnd

3bygqnnd2#

as!是一个操作符,它允许你强制转换一个示例到某个类型。转换并不意味着转换。小心!如果你不确定类型,使用as?(条件转换),它返回你所需类型的对象或nil。

import Darwin
class C {}
var c: C! = nil
// the conditional cast from C! to C will always succeeds, but the execution will fail,
// with fatal error: unexpectedly found nil while unwrapping an Optional value
if let d = c as? C {}
// the same, with fatal error
guard let e = c as? C else { exit(1)}

即使转换成功,你的对象也可能有nil值。所以,先检查对象的nil值,然后再试一次。(如果你转换为引用类型)

相关问题