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
Odpowiedz
Ż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)
Dziękuję bardzo za szybką odpowiedź! –
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).
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 –
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