2014-11-07 22 views
5

W języku Java można zainicjować końcowe ciągi statyczne w interfejsie. Czy jest też metoda w Swift?Swift Inicjalizacja zmiennych stałych w protokole

+0

dlaczego nie po prostu przeczytaj ten https://developer.apple.com/library/ios/documentation/swift/conceptual/Swift_Programming_Language/Protocols.html? Opowiada wszystko o protokołach w Swift –

+0

Ogólnie nie jest to dobra architektura do deklarowania stałych w interfejsach. Wiem, że wielu programistów Java to robi, a następnie implementują ten interfejs ze stałymi klasami, ale to naprawdę nadużywa koncepcji interfejsów. Interfejs powinien zapewniać wspólny interfejs, czyli popularne metody. Nie stałe. – Sulthan

Odpowiedz

3

Żadne szybkie nie obsługuje tego. Moja rada to zdefiniowanie struktury obok twojego protokołu i zdefiniowanie wszystkich stałych jako niezmiennych statycznych właściwości przechowywanych. Na przykład:

protocol MyProtocol { 
} 

struct MyProtocolConstants { 
    static let myConstant = 10 
} 

Należy pamiętać, że struktury są preferowane do klas, co najmniej jednego powodu: zajęcia nie obsługuje statyczne zapisane właściwości (jeszcze)

+0

Dziękuję bardzo za szybką odpowiedź! –

2

Faktycznie, można to zrobić w Swift używając rozszerzenia protokołu :

Tworzenie protokołu i zdefiniować zmienną chcesz z getter:

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

zdefiniować rozszerzenie protokołu:

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

Zaletą tego jest to, że nie trzeba poprzedzać nazwy protokołu jak zwykle w przypadku Swift i statyki.

Jedynym problemem jest to, że dostęp do zmiennej można uzyskać tylko w klasie implementującej protokół (co i tak jest prawdopodobnie najczęstszym przypadkiem).