gpt4 book ai didi

ios - Swift:父类类函数是否有可能返回子类的实例?

转载 作者:行者123 更新时间:2023-11-28 09:12:12 25 4
gpt4 key购买 nike

我在下面编写了 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()

应该怎么办??在 Animal 类中是?

我尝试了 AnyObject,但是当我在 iPhone 模拟器上构建代码时,我收到一条错误消息“methodSignatureForSelector: -- trouble ahead无法识别的选择器 -[Cat run]” 尽管此编译成功。

最佳答案

如果你想调用 ,你不能在没有 downcast 的情况下这样做,因为它必须从 something 到特定类型 Cat >cat.run()。返回 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()

就是说,不要做第二个,只做可选的转换。

关于ios - Swift:父类类函数是否有可能返回子类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28979961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com