[英]Swift: Is it possible that parent class class function returns a instance of subclass?
我在下面編寫了Swift代碼。
class Animal {
class func getAnimalByName(name:String) -> ?? {
if(name == "Cat") {
return Cat()
} else {
return Bird()
}
}
}
class Cat: Animal {
func run() {
println("run")
}
}
class Bird: Animal {
func fry() {
println("fry")
}
}
然后我想像下面的代碼那樣編寫而不使用“ as Cat”強制轉換
var cat = Animal.getAnimalByName(name: "Cat")
cat.run()
什么應該 ?? 在動物課上是?
我嘗試了AnyObject,但是當我在iphone模擬器上構建代碼時,出現了一個錯誤,提示“ methodSignatureForSelector:-提前遇到無法識別的選擇器-[Cat運行]”,盡管此編譯成功。
您應該向下轉換由getAnimalByName
方法返回的對象,
class Animal {
class func getAnimalByName(name:String) -> Animal {
if(name == "Cat") {
return Cat()
} else {
return Bird()
}
}
}
class Cat: Animal {
func run() {
println("run")
}
}
class Bird: Animal {
func fry() {
println("fry")
}
}
var cat = Animal.getAnimalByName("Cat") as Cat
cat.run()
如果不進行向下轉換,您將無法做到這一點,因為如果您希望能夠調用cat.run()
,它將必須從某種類型轉換為特定類型的Cat
。 如果返回Return Animal
,則可以使用可選的向下轉換或強制向下轉換:
// optional
let cat = Animal.getAnimalByName("Cat")
if let cat = cat as? Cat {
cat.run()
}
// forced
let cat2 = Animal.getAnimalByName("Cat")
(cat2 as! Cat).run()
也就是說,不要執行第二個,只執行可選的強制轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.