Static vs class как переменная класса/метод (Swift)
Я знаю, что ключевое слово static
используется для объявления переменной типа/метода в struct
, enum
и т.д.
Но сегодня я нашел, что он также может использоваться в сущности class
.
class foo {
static func hi() {
println("hi")
}
class func hello() {
println("hello")
}
}
Какое static
использование ключевого слова в объекте class
?
Спасибо!
edit: Я имею в виду Swift 1.2, если это имеет значение
Ответы
Ответ 1
Из примечаний к выпуску Xcode 3 beta 3:
"статические" методы и свойства теперь разрешены в классах (как псевдоним для "final class" ).
Итак, в Swift 1.2, hi()
, определяемом как
class foo {
static func hi() {
println("hi")
}
}
- это метод типа (т.е. метод, вызываемый самим типом)
который также является окончательным (т.е. не может быть переопределен в подклассе).
Ответ 2
В классах он используется точно так же. Однако до Swift 1.2 (в настоящее время в бета-версии) static
недоступен - спецификатор альтернативного class
был доступен для объявления статических методов и вычисляемых свойств, но не сохраненных свойств.
Ответ 3
В Swift 5 я использую type(of: self)
для динамического доступа к свойствам класса:
class NetworkManager {
private static var _maximumActiveRequests = 4
class var maximumActiveRequests: Int {
return _maximumActiveRequests
}
func printDebugData() {
print("Maximum network requests: \(type(of: self).maximumActiveRequests).")
}
}
class ThrottledNetworkManager: NetworkManager {
private static var _maximumActiveRequests = 2
override class var maximumActiveRequests: Int {
return _maximumActiveRequests
}
}
ThrottledNetworkManager().printDebugData()
Отпечатки 2.
В Swift 5.1 мы должны иметь возможность использовать Self
с большой буквы S вместо type(of:)
.