在以下代码中,as!
的向下转换在同一类型中失败。
Swift不允许同类型的向下转换吗?
class base {
var a = 1
}
class derived : base {
}
let a: base? = base()
let b = a as! base // error occur!
println("\(b.a)")
错误讯息:
error: downcast from 'base?' to 'base' only unwraps optionals; did you mean to use '!'?
let b = a as! base
~ ^ ~~~~
如果我修改上面的代码如下,则没有问题。
let a: base? = derived()
let b = a as! derived
println("\(b.a)")
答案 0 :(得分:1)
你可以试试这个:
let b = a!
答案 1 :(得分:1)
这是swift
中DownCasting
的定义
向下转换
某个类类型的常量或变量实际上可能是指幕后的子类的实例。在您认为是这种情况的情况下,您可以尝试使用类型转换运算符(作为?或作为!)向下转换为子类类型。
因此,如果类型相同,那就不是DownCasting。