在Swift中将变量更改为子类
在Swift中,如果我有一个基类和两个继承自它的类,它们有自己的属性。如果我将一个变量分配给基类,然后再将其更改为子类,则无法访问所述属性。这里有一个非常愚蠢的例子。这是我在紧要关头能想到的。在Swift中将变量更改为子类,swift,inheritance,Swift,Inheritance,在Swift中,如果我有一个基类和两个继承自它的类,它们有自己的属性。如果我将一个变量分配给基类,然后再将其更改为子类,则无法访问所述属性。这里有一个非常愚蠢的例子。这是我在紧要关头能想到的。 如何将一个变量初始设置为基类,并将其转换为子类并访问所述子类的属性?您需要向下转换变量。因此,print(a.socks)应替换为 if a is Human { print((a as! Human).socks) } 或使用附加变量 if let b = a as? Human { pri
如何将一个变量初始设置为基类,并将其转换为子类并访问所述子类的属性?您需要向下转换变量。因此,
print(a.socks)
应替换为
if a is Human {
print((a as! Human).socks)
}
或使用附加变量
if let b = a as? Human {
print(b.socks)
}
upd:
您也可以使用防护装置实现这一点:
guard let a = a as? Human
else { return }
print(a.socks)
这是面向对象编程中非常常见的场景
R.K.的回答完全正确。我只想在这里添加另一种实现相同结果的方法
您可以使用开关查找正确类型的变量并执行向下转换:
var some : Animal?
some = Human() // or some = Dog() or some = Animal()
switch some {
case let human as Human: print("It's a human with \(human.socks) socks")
case let dog as Dog: print("It's a Dog! The collar says: \(dog.collar)")
default: print("It's some unknown kind of animal")
}
希望这有帮助
var some : Animal?
some = Human() // or some = Dog() or some = Animal()
switch some {
case let human as Human: print("It's a human with \(human.socks) socks")
case let dog as Dog: print("It's a Dog! The collar says: \(dog.collar)")
default: print("It's some unknown kind of animal")
}