我有一個函數,它需要一個類型爲Being
的實例。有Being
有兩個亞類:Person
和Animal
。我希望函數能夠識別哪個被傳遞,並且針對每個子類使用特定的屬性。將超類作爲其中一個子類投射
我想這會工作:
func fight(attacker1: Being, attacker2: Being) -> String {
if attacker1 is Person {
let name1 = attacker1.name as! Person //Error: Value of type Being has no member name
} else {
print("Its not a person")
}
但事實並非如此。什麼是最順利/最短的方式來實現我在找什麼?
在這種情況下,爲什麼不使用基類中的名字? (因爲動物和人都可以有名字) – giorashc
'attacker1.name as!人'這是錯誤的,請看[V.Khambirs'Ans](https://stackoverflow.com/a/44493238/5546312) – D4ttatraya
@giorashc他們不能。它是名稱或物種。根據交給該職能的班級,它需要知道要求哪一個。 – Marmelador