2014-11-07 32 views
5

In Java können Sie statische Strings in einer Schnittstelle initialisieren. Gibt es auch eine Methode in Swift?Swift Initialisierung von konstanten Variablen im Protokoll

+0

Warum nicht einfach diese https://developer.apple.com/library/ios/documentation/swift/conceptual/Swift_Programming_Language/Protocols.html lesen? Es sagt alles über Protokolle in Swift –

+0

Im Allgemeinen ist es keine gute Architektur, Konstanten in Schnittstellen zu deklarieren. Ich weiß, dass viele Java-Entwickler das tun, und dann implementieren sie diese Schnittstelle mit Konstanten zu ihren Klassen, aber das missbraucht wirklich das Konzept von Schnittstellen. Eine Schnittstelle sollte eine gemeinsame Schnittstelle bereitstellen, dh allgemeine Methoden. Keine Konstanten. – Sulthan

Antwort

3

Keine schnelle unterstützt das nicht. Mein Rat ist, eine Struktur neben Ihrem Protokoll zu definieren und alle Konstanten als unveränderliche statische gespeicherte Eigenschaften zu definieren. Zum Beispiel:

protocol MyProtocol { 
} 

struct MyProtocolConstants { 
    static let myConstant = 10 
} 

Beachten Sie, dass structs Klassen bevorzugt werden, für mindestens einen Grund: Klassen unterstützen nicht statisch gespeichert Eigenschaften (noch)

+0

Vielen Dank für die schnelle Antwort! –

2

Eigentlich kann man dies in Swift tun Protokollerweiterungen :

ein Protokoll erstellen und die Variable, die Sie mit einem Getter definieren wollen:

protocol Order { 
    var MAX_ORDER_ITEMS: Int { get } 
    func getItem(item: Int) -> OrderItem 
    // etc 
} 

eine Protokollerweiterung definieren:

extension Order { 
    var MAX_ORDER_ITEMS: Int { return 1000 } 
} 

Ein Vorteil davon ist, dass Sie den Protokollnamen nicht wie bei Swift und Statik üblich vorsetzen müssen.

Das einzige Problem ist, dass Sie nur innerhalb einer Klasse, die das Protokoll implementiert, auf die Variable zugreifen können (was wahrscheinlich der häufigste Fall ist).

Verwandte Themen