【发布时间】:2018-03-05 11:27:26
【问题描述】:
我有“class func create()”的动物类:
class func create<T>() -> T {
let animal = Animal() as! T
return animal
}
我有狗的子类:
class Dog: Animal { }
我使用 create() 来创建子类对象:
let doggy: Dog = Dog.create()
但如果我这样创造小狗:
let doggy = Dog.create()
我有错误“无法推断通用参数'T'” 如何设置根据调用者类型推断的动态类型?
【问题讨论】:
-
你为什么不创建一个常规的初始化器?您应该只创建一个 Animal 协议并使用结构而不是子类化
-
protocol Animal { var weight: Int { get } }struct Dog: Animal { let weight: Int }let doggy = Dog(weight: 10) -
protocol Animal { static func create() -> Self }struct Dog: Animal { static func create() -> Dog { return Dog() } }let doggy = Dog.create()