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:).