2017-01-16 2 views
-4

spezifische Schnittstelle implementiert Bitte helfen Sie übersetzen folgenden Java-Code in Swift 3:Swift 3 Äquivalent für Java-Eigenschaft mit dem Typ, der

interface A { 
} 

class BiA implements A { 
} 

interface C { 
    List<? extends A> getAs(); 
} 

class D implements C { 
    List<BiA> getAs(); 
} 

TIA

+1

ich wirklich, wirklich wollen, schreiben und Antwort, aber Code-Anforderungen werden auf SO nicht gefördert, werden Sie eine machen müssen versuchen Sie es weiter und geben Sie uns mehr Informationen darüber, welche Probleme Sie haben. Tipp 'Interface' ~ =' Protokoll' – MadProgrammer

+0

Sicher, das Problem, das ich gegenüberstelle, ist mit Protokoll C. Ich weiß nicht, wie man das Protokoll deklariert, ich weiß nicht, wie man "? Extends A" in Swift darstellt. Ich bin froh, eingebaute Swift-Arrays zu verwenden. Alles, was ich will, ist in der Lage sein, Klasse BiA in D zu verwenden, wo die getAs() implementiert die Schnittstelle/Protokoll-Methode von C. Es ist seltsam, dass ein so einfaches Konstrukt ist so schwer, eine Antwort zu bekommen, nicht in Apple-Führer noch in irgendwelche Foren. – user1854555

+0

Ehrlich gesagt, Swifts generische Unterstützung ist nicht so gut wie die von Java (einige Leute werden mich dafür hassen, aber es ist einfach nicht so mächtig). Mit 'C' willst du etwas über' associatedtype' herausfinden, jetzt wirst du, wenn du diesen Weg einmal begonnen hast, viele Fallstricke mit ihr entdecken (IMHO), da Swifts System sehr pragmatisch ist – MadProgrammer

Antwort

1

So etwas wie das?

protocol A { 
    func hello() 
} 

class BiA: A { 
    func hello() { 
     print("Hello") 
    } 
} 

class B2iA: A { 
    func hello() { 
     print("Hello2") 
    } 
} 

protocol C { 
    associatedtype Someclass 
    func getAs() -> [Someclass] 
} 

class D: C { 
    typealias Someclass = A 
    func getAs() -> [Someclass] { 
     return [BiA(), B2iA()] 
    } 
} 

D().getAs().forEach({ $0.hello() }) 

Ergebnis:

Hallo

Hello2

+0

Awesome Antwort, funktioniert für mich, danke @iOSergey – user1854555

Verwandte Themen