2014-09-19 52 views
6

我正在嘗試執行以下操作。使用swift鑄造具有泛型參數的struct

protocol Vehicle { 

} 

class Car : Vehicle { 

} 

class VehicleContainer<V: Vehicle> { 

} 

let carContainer = VehicleContainer<Car>() 
let vehicleContainer = carContainer as VehicleContainer<Vehicle> 

,但我得到的最後一行的編譯錯誤:

'Car' is not identical to 'Vehicle' 

對此有什麼解決辦法?

另外我相信這種類型的鑄造應該是可能的,因爲我可以用基於泛型構建的數組來完成。以下作品:

let carArray = Array<Car>() 
let vehicleArray = carArray as Array<Vehicle> 
+0

不知道這是否與它有任何關係,但'Array'是一個值類型。試着用'struct'來重新構造你的上面的層次結構,看看你是否仍然有同樣的錯誤。 – martineno 2014-09-19 08:13:00

+0

是的,我試過已經用VehicleContainer作爲Struct,它給出了相同的錯誤 – hoddez 2014-09-20 09:55:31

+0

你有沒有想過這個? – joslinm 2015-02-13 16:09:06

回答

0

迅速擴大在操場上你的陣列例如按預期工作

protocol Vehicle { 

} 

class Car : Vehicle { 

} 

class Boat: Vehicle { 

} 

var carArray = [Car]() 
var vehicleArray : [Vehicle] = carArray as [Vehicle] 
vehicleArray.append(Car()) // [__lldb_expr_183.Car] 
vehicleArray.append(Boat()) // [__lldb_expr_183.Car, __lldb_expr_183.Boat] 

有沒有做太多的工作,迅速仿製藥,但在swift docs

struct Stack<T: Vehicle> { 
    var items = [Vehicle]() 
    mutating func push(item: Vehicle) { 
     items.append(item) 
    } 
    mutating func pop() -> Vehicle { 
     return items.removeLast() 
    } 
} 
快速尋找

和使用車輛代替通用類型T

var vehicleStack = Stack<Vehicle>() 
vehicleStack.push(Car()) 
vehicleStack.push(Boat()) 
var aVehicle = vehicleStack.pop() 

似乎在應用程序中編譯aok(遊樂場有一些處理它的問題,雖然)