我有一个模型对象:
class Animal {
// ...
}
以及子类:
class Dog: Animal {
// ...
}
class Cat: Animal {
// ...
}
我创建了一个通用类。
class AnimalController<T: Animal> {
var animal: T?
func feed(animal: T) {
let food = Food(T.self)
animal.feed(food)
}
}
以下是问题所在:
class MainViewController: UIViewController {
var controller: AnimalController<Animal>?
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
// I want control a dog
self.controller = AnimalController<Dog>() // Error
// I want control a cat
self.controller = AnimalController<Cat>() // Error
}
}
我该如何创建一个适用于狗和猫的通用类?谢谢!
更新:Hamish给了我解决方案,链接了其他两篇文章。
我有模型对象:
class Animal {
// ...
}
以及其子类:
class Dog: Animal {
// ...
}
class Cat: Animal {
// ...
}
此外,我已经创建了一个通用类。
class AnimalController<T> {
var type: T
init(type: T) {
self.type = type
}
func feed() {
if type is Animal.Type {
let food = Food(type as! Animal.Type)
animal.feed(food)
}
}
}
现在它可以正常工作:
class MainViewController: UIViewController {
var controller: AnimalController<Animal>?
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
// I want control a dog
self.controller = AnimalController<Dog>() // Works!
self.controller = AnimalController<Cat>() // Works!
}
}
AnimalController<Dog>
赋值给AnimalController<Animal>
。然后你可以说controller?.feed(animal: Cat())
。现在你刚刚把狗食喂给了猫。 - Hamish