静态与类作为类变量/方法(Swift)
Posted
技术标签:
【中文标题】静态与类作为类变量/方法(Swift)【英文标题】:static vs class as class variable/method (Swift) 【发布时间】:2015-03-23 09:08:21 【问题描述】:我知道static
关键字用于在struct
、enum
等中声明类型变量/方法。
但是今天我发现它也可以用在class
实体中。
class foo
static func hi()
println("hi")
class func hello()
println("hello")
static
关键字在 class
实体中的用途是什么?
谢谢!
编辑:我指的是 Swift 1.2,如果这有什么不同的话
【问题讨论】:
您在哪个版本的 Xcode 中尝试该代码? developer.apple.com/library/ios/documentation/Swift/Conceptual/…? 【参考方案1】:来自 Xcode 3 beta 3 发行说明:
现在允许在类中使用“静态”方法和属性(作为 “class final”的别名)。
所以在 Swift 1.2 中,hi()
定义为
class foo
static func hi()
println("hi")
是一个类型方法(即在类型本身上调用的方法) 这也是 final (即不能在子类中被覆盖)。
【讨论】:
【参考方案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 中,我们应该可以使用带有大写 S 的Self
,而不是type(of:)
。
【讨论】:
以上是关于静态与类作为类变量/方法(Swift)的主要内容,如果未能解决你的问题,请参考以下文章