2016-12-07 11 views
0

Я пытаюсь преобразовать элементы внутри моего массива с их типом базового класса:Преобразование элементов массива в их базового типа класса

extension Array{ 

    mutating func convertToBase<A>(type: A.Type){ 

     let parentArray = self.map{ $0 as type } 
    } 
} 

class A {} 
class B: A {} 

let instanceB = B() 
var array = [instanceB] 
array.convertToBase(type: A.self) 

но продолжает говорить мне эту ошибку:

'Use of undeclared type 'type''

enter image description here

+0

Какова основная цель этого? Я думаю, что это немного странно делать такую ​​функциональность ... –

+0

Я знаю, что это странно, но мне нужно это в одном из приложений. :) –

ответ

2

Это не имеет никакого смысла. Если у вас есть массив из B, базовый класс которого имеет тип A, почему его нужно преобразовать? Не все ли B s, также A s во время выполнения?

«Преобразование» это должно быть так же просто, как:

let instanceB = B() 
var array = [instanceB] 
var aArray = array as [A] 

Если вы Хеллбент использовать ваш метод, это должно сделать трюк:

extension Array{ 
    mutating func convert<G>(to type : G.Type) -> [G] { 
     let parentArray = self.map { 
      $0 as! G 
     } 
     return parentArray 
    } 
} 

Обратите внимание, что это пытается преобразовать ANY тип к типовому типу G. Например, это:

var anotherArray = array.convert(to: A.self) 

... поглотит, если B не является подтипом A. Если это подтип AanotherArray также будет [A]. Не могу поверить, что я написал эту практически бесполезную функцию.