2017-09-24 84 views
0

子類的對象我有動物類 「級功能建立()」:類FUNC鍵創建斯威夫特

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' 如何根據調用者類型設置動態類型推斷?

+2

爲什麼不只是創建一個常規的初始化程序?你應該創建一個動物協議,並使用結構而不是繼承子類 –

+0

'協議Animal {var weight:Int {get}}' 'struct Dog:Animal {let weight:Int}' 'let doggy = Dog(weight: 10)' –

+0

'協議動物{ 靜態FUNC創建() - >自 }' '結構犬:動物{ 靜態FUNC創建() - >犬{ 返回狗() } }' '讓小狗= Dog.create()' –

回答

0

這一行:

let doggy = Dog.create()

聲明恆定的,沒有明確指定它的類型,但是,創建功能需要它。嘗試:

let doggy: Dog = Dog.create()