static vs class as class variable / method(Swift)

时间:2015-03-23 09:08:22

标签: ios swift

我知道static关键字用于在structenum等中声明类型变量/方法。

但是今天我发现它也可以在class实体中使用。

class foo {
  static func hi() {
    println("hi")
  }
  class func hello() {
    println("hello")
  }
}

static实体中class关键字的用途是什么?

谢谢!

编辑:我指的是Swift 1.2,如果这有什么不同

3 个答案:

答案 0 :(得分:21)

从Xcode 3 beta 3发行说明:

  

现在允许在类中使用“静态”方法和属性(作为   “class final”的别名。)

所以在Swift 1.2中,hi()定义为

class foo {
  static func hi() {
    println("hi")
  }
}

类型方法(即在类型本身上调用的方法) 也是 final (即不能在子类中重写)。

答案 1 :(得分:3)

在课程中,它用于完全相同的目的。但是,在Swift 1.2(目前处于测试阶段)static不可用之前,备用class说明符可用于声明静态方法和计算属性,但不能用于存储属性。

答案 2 :(得分:0)

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