Kann meine Klasse den Protokolleigenschaftstyp in Swift überschreiben?

8
%Vor%

Ich erhalte einen Fehler "Type 'Object' entspricht nicht dem Protokoll 'Parent'. Der Grund für diesen Fehler ist, dass ich Kinder als ein Array von Foo anstelle von AnyObject definiert habe. Kann ich das irgendwie machen? arbeiten?

    
MAH 01.08.2015, 20:14
quelle

5 Antworten

6

Wenn AnyObject im Protokoll erforderlich ist, bedeutet dies, dass das children -Array AnyObject -Einträge akzeptieren muss. Aber es klingt so, als ob Bar 's Kinder nur Foo Objekte sein sollen.

Stattdessen können Sie dem Protokoll ein zugehöriger Typ :

%Vor%     
jtbandes 01.08.2015, 20:22
quelle
2

Wenn Sie immer ein Array vom Typ AnyObject haben möchten, müssen Sie es in Ihrer Klasse angeben:

%Vor%

Wenn Sie jedoch ein spezifischeres Protokoll mit typealias verwenden können, können Sie Ihr Protokoll wie folgt neu schreiben:

%Vor%

Auf diese Weise funktioniert Ihre frühere Konformität Ihrer Klasse, aber Sie müssen berücksichtigen, dass dieses Protokoll nur als generische Einschränkung und daher nur in Funktionen und generischen Deklarationen verwendet werden kann:

%Vor%     
Qbyte 01.08.2015 21:01
quelle
1

Wenn das Protokoll feststellt, dass es Getter und Setter vom Typ [AnyObject] gibt, bedeutet das, dass es einen solchen Getter und Setter geben muss, nicht den Subtyp dieser Klasse.

Ihr Code wäre logisch falsch - weil Sie in der Lage wären, zB [Int] (Protokoll sagt es ist möglich) auf die Variable vom Typ [Foo] (Klasse habe nur diese Var)

zu setzen

Das ist also eigentlich der einzig richtige Weg.

%Vor%

In swift 2.0 könnte die Typalias eine andere Option sein.

    
Pavel Smejkal 01.08.2015 20:17
quelle
0

Nein, Sie können den Typ einer Eigenschaft nicht ändern.

Fügen Sie dies Ihrer Bar-Klasse hinzu:

%Vor%     
Esqarrouth 01.08.2015 20:20
quelle
0

Alternative zur Protokollantwort, die Ihnen einige Vorteile bietet, die ein Protokoll nicht bietet.

%Vor%

Related: Wie in Swift geben Sie type constraint als Aufzählung an ?

    
twodayslate 21.07.2017 21:18
quelle

Tags und Links