2016-12-07 4 views
0

Ich versuche, die Elemente in meinem Array zu ihrer Basisklasse Typ zu konvertieren:ihrer Basisklasse Typ Elemente eines Arrays konvertieren

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) 

aber es hält mich diesen Fehler zu sagen:

'Use of undeclared type 'type''

enter image description here

+0

Was ist der Hauptzweck, dies zu tun? Ich denke, es ist etwas komisch, eine solche Funktionalität zu machen ... –

+0

Ich weiß, es ist irgendwie komisch, aber ich brauche es in einer der App-Fälle :) –

Antwort

2

Das macht überhaupt keinen Sinn. Wenn Sie ein Array von B haben, dessen Basisklasse vom Typ A ist, warum müssen Sie konvertieren? Sind nicht alle B s, auch A s in der Laufzeit?

„Konvertieren“ sollte so einfach sein wie:

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

Wenn Sie sich mit Ihrer Methode hellbent sind, sollte dies den Trick:

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

Beachten Sie, dass diese versucht ANY zu konvertieren Geben Sie den generischen Typ G ein. Zum Beispiel dieses:

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

... Wille Fall, wenn B ist kein Subtyp von A. Wenn es sich um einen Untertyp von AanotherArray handelt, wird auch [A] sein. Ich kann nicht glauben, dass ich gerade diese praktisch nutzlose Funktion geschrieben habe.

Verwandte Themen