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)}
2条答案
按热度按时间vsaztqbk1#
do try catch
语句只用于处理抛出函数。如果要处理强制转换,请使用as?
:或新的guard语句
3bygqnnd2#
as!是一个操作符,它允许你强制转换一个示例到某个类型。转换并不意味着转换。小心!如果你不确定类型,使用as?(条件转换),它返回你所需类型的对象或nil。
即使转换成功,你的对象也可能有nil值。所以,先检查对象的nil值,然后再试一次。(如果你转换为引用类型)