У меня было следующее замешательство. Насколько я знаю, основное различие между статическими и классом ключевых слов при объявлении метода заключается в том, что второй может быть переопределен в подклассах.Swift Объявить класс Func в протоколе
Проблема
Однако, когда я объявляю протокол в Swift 1.2, как это:
protocol MyProtocol
{
class func dummyClassMethod()
}
компилятор выдает ошибку:
Class methods are only allowed within classes; use 'static' to declare a static method
ошибка является довольно описательным, как очевидно, MyProtocol не является классом, однако я хочу сделать часть func класса.
То, что я пытался
Я обнаружил, что если я объявляю интерфейс в протоколе, как статического, компилятор доволен, и я мог бы использовать этот статический метод во всех классах, которые принимают этот протокол:
protocol MyProtocol
{
static func dummyClassMethod()
}
вопрос
Так что мой вопрос, в принципе это правильно? Эта декларация гласит, что мой метод класса не может быть переопределен у детей, однако в моей реализации я мог бы написать и использовать следующее:
class ClassA: MyProtocol
{
class func dummyClassMethod() {
}
}
class ClassB: ClassA
{
override class func dummyClassMethod() {
}
}
и теперь мой dummyClassMethod не статичен больше ...
Компилятор работает, и все работает, но почему?
Это конкретный факт, что сам интерфейс является статическим, однако это реализация не так ли?
- Есть ли лучшая альтернатива классу func в протоколах?
решение Objective-C
В ObjC это довольно легко и компилировать & бесперебойная работа:
@protocol MyProtocol
+(void)dummyClassMethod;
@end
Я знаю, что это не относится к вашему вопросу, а также, но почему вам нужно подклассы? – ilya
Я не на момент написания этого, но кто знает в будущем. Я больше понимаю, как это работает, поэтому я могу правильно его использовать. –
был этот вопрос решающий op? Я новичок в быстроте. – CaffeineShots