如何向下倾斜!工作相同类型?

时间:2015-06-24 02:56:10

标签: ios macos swift

在以下代码中,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)")

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

let b = a!

答案 1 :(得分:1)

这是swift

DownCasting的定义
  

向下转换

     

某个类类型的常量或变量实际上可能是指幕后的子类的实例。在您认为是这种情况的情况下,您可以尝试使用类型转换运算符(作为?或作为!)向下转换为子类类型。

因此,如果类型相同,那就不是DownCasting。

Swift document