2016-05-15 2 views
2

Im Swift documentation section about Protocols, steht geschrieben, dass:Warum wird empfohlen, den Eigenschaftserfordernissen in Swift-Protokollen die Präfixe statisch voran zu geben?

Immer Anforderungen Präfix Typ Eigenschaft mit dem static Schlüsselwort, wenn Sie sie in einem Protokoll zu definieren. Diese Regel betrifft auch wenn Art Eigenschaftsanforderungen können mit dem class oder static Schlüsselwort, wenn sie von einer Klasse

Ich verstehe nicht umgesetzt vorangestellt werden, wenn Sie sollen immer das tun oder nur in bestimmten Fällen (weil später in die docs, static ist nicht immer da).

Warum wird die Verwendung von static empfohlen? Was bedeutet das konkret?

Vielen Dank.

EDIT: Die gleiche Frage gilt für Methodenanforderungen.

+1

Sie verwenden 'static' in Ihrem Protokoll für„Typ-Eigenschaften“(d Eigenschaften, die dem Typ selbst zugeordnet sind, nicht bestimmte Instanzen dieses Typs). Wenn 'static' nicht vorhanden ist, handelt es sich nicht um eine type-Eigenschaft (z. B. eine standardmäßige gespeicherte Eigenschaft). – Rob

+0

Fragen Sie, warum Sie 'static' (im Gegensatz zu einem anderen Schlüsselwort) für type property verwenden? Oder fragen Sie uns, was der Unterschied zwischen einer Instanzeigenschaft und einer Typeigenschaft ist? – Rob

+0

@Rob Eigentlich hatte ich verstanden, dass du ** immer ** 'statisch' verwenden solltest, aber jetzt verstehe ich, was das' statisch' bedeutet. –

Antwort

3

später in der Dokumentation, statisch ist nicht immer da

Dieser Abschnitt spricht über Typ Anforderung, dh eine Anforderung des konformen Typ eine static Eigenschaft des bestimmten Namen zu haben und Art. Mit anderen Worten, wenn Sie schreiben diese

protocol MyProtocol { 
    static var myProperty: Int { get set } 
} 

die bestimmungsgemäße Klasse diesen

class MyClass : MyProtocol { 
    static var myProperty: Int 
}// ^^^^^^ 

tun müssen, es hat auch eine Option, dies zu tun:

class MyClass : MyProtocol { 
    class var myProperty: Int 
}// ^^^^^ 

aber es gibt keine solche Option beim Definieren eines Protokolls.

Wenn static nicht verwendet wird, wie es später in der Dokumentation geschieht, wird die Anforderung eine Instanz Anforderung, kein Typ Anforderung:

protocol MyProtocol2 { 
    var myProperty2: Int { get set } 
} 

Nun ist die Klasse eine Instanzvariable bereitstellen muss:

Beachten Sie, dass es eine ähnliche Einschränkung bei der Deklaration von Instanzanforderungen in Protokollen gibt: Sie verwenden immer var, e eine Implementierung uch wenn let verwendet, um die Anforderung zu erfüllen:

protocol MyProtocol3 { 
    var myProperty3: Int { get } 
}// ^^^ 
class MyClass3 : MyProtocol3 { 
    let myProperty3 = 42 
}// ^^^ 
+0

Danke! Ich dachte, es würde immer "statisch" sagen, aber jetzt verstehe ich den Unterschied! Vielen Dank für diese detaillierte Antwort. –

Verwandte Themen