Мне было интересно, почему вы не можете использовать ключевое слово static
в классе. Я знаю, что вы можете использовать его в struct
, но не в class
Кто-нибудь знает, почему они выбирают для этого? И если да, то есть ли какие-либо преимущества в предоставлении static
?В чем причина использования статических методов/переменных в классе
ответ
Это терминология bêtise. Что Apple сделала, так это то, что вы используете static
в перечислении или структуре и class
в классе. На мой взгляд, это было очень глупое решение, поскольку они точно параллельны друг другу. Многие люди размещают на форумах разработчиков, предлагая им просто называть их static
.
Результат является кандидатом на Бритву Оккама: две фразы, например. статическое свойство и свойство класса, или статический метод и метод класса, которые означают одно и то же. И затем они пытаются покрыть свои треки в документации, добавив третий термин в качестве зонтика, «свойство типа» (что означает свойство static-or-class) или «метод типа» (что означает метод «статический или класс») что только ухудшает ситуацию.
Неполадка ситуации также раскрывается тем, что вы должны делать в протоколах: вы объявляете свойство class
в протоколе, а затем, если структура принимает его, он называет это свойство static
. То же самое с методом class
в протоколе; принимающая структура должна называть это методом static
. Вы могли бы подумать, что это одно могло бы сказать им, что они сделали что-то плохое.
Редактировать: Чем больше я думаю об этом, тем больше мне нравится предложение, высказанное newacct
в комментарии ниже. Если бы Apple просто использовала ключевое слово зонтика type
здесь как часть языка, вся проблема была бы решена. У нас могли бы быть объявления type var
, type let
, type func
, и это будет одинаково работать в перечислениях, структурах, классах и протоколах по всей доске.
От Swift Language Guide on Methods Apple решила дифференцировать используемый синтаксис, основываясь на базовом типе, который вы строите.
Классы объявляют «Методы типа» с ключевым словом Class
. Пример:
class MyClass {
class func myFunc(){ ... }
}
структур объявить "Тип" Методы с ключевым словом Static
. Пример:
struct MyStruct {
static func myFunc(){ ... }
}
В обоих случаях в тару Тип Метод позволяет вызывать метод без создания экземпляра класса или структуры.
В то время как не класс/статическая функция будет требовать что-то вроде
let instance = MyClass()
instance.myFunc()
... объявить переменную как Тип Метод позволяет что-то вроде MyClass.myFunc()
- 1. В чем причина использования WADL?
- 2. В чем причина использования^в методе hashcode?
- 3. В чем причина отсутствия наследования статических переменных в Dart?
- 4. Angular2 i18n: В чем причина использования XLIFF?
- 5. В чем причина использования библиотеки MSpec?
- 6. В чем причина использования правильного типа данных?
- 7. В чем причина непоследовательного использования NSURL NSFileManager?
- 8. В чем причина использования (if false! == ...)
- 9. В чем причина использования AMQP вместо Beanstalkd?
- 10. В чем причина @strongify
- 11. В чем причина «нуля»
- 12. В чем причина определения неизвестного перечисления в отдельном классе?
- 13. В чем преимущество использования статических методов в Python?
- 14. В чем причина OuterClass.this.someMethod()?
- 15. В чем причина «System.IO.IsolatedStorage.IsolatedStorageException»?
- 16. В чем причина UnsatisfiedLinkError?
- 17. В чем причина вращения массива?
- 18. В чем причина использования this.each() в плагинах jQuery?
- 19. В чем причина использования; в списках F # вместо,?
- 20. В чем причина использования вызовов подпрограмм без ограничений в Perl?
- 21. В чем причина использования === вместо == с typeof в Javascript?
- 22. В чем причина использования макроса DEBUG в C++?
- 23. В чем причина использования наблюдаемого поля вместо onkeydown в рельсах?
- 24. В чем причина использования Javascript в Wikitude SDK для Android?
- 25. В чем причина использования частных моделей в контроллере MVC?
- 26. В чем причина использования файла маршрутов в современных рамках?
- 27. Конструктор в классе статических методов
- 28. Использование статических мьютексов в классе
- 29. В чем причина моего NullPointerException?
- 30. В чем причина использования такого синтаксиса (0, _.Em)();
Up чисто голосования за bêtise – jrturton
Что делать Я получаю за использование _bêtise_ и Occam's Razor в том же сообщении? Я смотрю на улицу для грузовика MacArthur Genius Grant, но, похоже, это не идет!:) – matt
«статическое свойство и свойство класса, или статический метод и метод класса, которые означают одно и то же». Они не означают одно и то же. Для вызовов статических методов и статических свойств, который вызывается, всегда определяется * статически * (т. Е. Фиксируется во время компиляции). С другой стороны, существует * динамический * lookup (какой метод вызывается во время выполнения) для методов класса и свойств класса. – newacct