2014-11-07 4 views
5

В Java вы можете инициализировать конечные статические строки в интерфейсе. Есть ли метод в Swift?Swift Инициализация постоянных переменных в протоколе

+0

Почему бы просто не прочитать это https://developer.apple.com/library/ios/documentation/swift/conceptual/Swift_Programming_Language/Protocols.html? Он рассказывает все о протоколах в Swift –

+0

В целом, это не хорошая архитектура, чтобы объявлять константы в интерфейсах. Я знаю, что многие разработчики Java делают это, а затем они реализуют этот интерфейс с константами для своих классов, но это действительно злоупотребляет концепцией интерфейсов. Интерфейс должен обеспечивать общий интерфейс, то есть общие методы. Не константы. – Sulthan

ответ

3

Ни один из них не поддерживает это. Мой совет - определить структуру вместе с вашим протоколом и определить все константы как неизменные статические хранимые свойства. Например:

protocol MyProtocol { 
} 

struct MyProtocolConstants { 
    static let myConstant = 10 
} 

Обратите внимание, что структуры являются предпочтительными классами, по крайней мере, по одной причине: классы не поддерживают статические сохраненные свойства (пока)

+0

Большое спасибо за быстрый ответ! –

2

На самом деле, вы можете сделать это в Swift с помощью расширений протокола :

Создать протокол и определить переменную, которую вы хотите с геттер:

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

Define продление протокола:

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

Преимущество этого в том, что вам не нужно префикс имени протокола, как обычно, с помощью Swift и statics.

Единственные проблемы в том, что вы можете получить доступ только к переменной из класса, реализующего протокол (это, вероятно, самый распространенный случай).

Смежные вопросы