在Swift中访问类中的静态variables

ClassName.staticVaribale是访问类中的静态variables的唯一方法吗? 我想要像self ,但为了课堂。 像class.staticVariable一样。

有两种方法从非静态属性/方法访问静态属性/方法:

  1. 正如你的问题所述,你可以前面的属性/方法名称的types:

     class MyClass { static let staticProperty = 0 func method() { print(MyClass.staticProperty) } } 
  2. Swift 2:你可以使用dynamicType

     class MyClass { static let staticProperty = 0 func method() { print(self.dynamicType.staticProperty) } } 

    Swift 3:你可以使用type(of:) :(谢谢@海西藏):

     class MyClass { static let staticProperty = 0 func method() { print(type(of: self).staticProperty) } } 

如果你在一个静态属性/方法中,你不需要在静态属性/方法前添加任何东西:

 class MyClass { static let staticProperty = 0 static func staticMethod() { print(staticProperty) } } 

斯威夫特有一种方法可以使马塞尔的回答满足最挑剔的风格指导神

 class MyClass { private typealias `Self` = MyClass static let MyConst = 5 func printConst() { print(Self.MyConst) } } 

当你想访问关联的types声明时,这使得Self可以像协议一样可用。 我不确定Swift 1,因为从来没有尝试过,但在Swift 2中,它完美的工作

在未来的Swift 3版本(尚未发布)中,您可以使用Self (是的,这是一个大写的)来引用包含的类。 这个build议被接受了,但是这个function还没有实现。

例如:

 struct CustomStruct { static func staticMethod() { ... } func instanceMethod() { Self.staticMethod() // in the body of the type } } 

来源: https : //github.com/apple/swift-evolution/blob/master/proposals/0068-universal-self.md

你可以通过定义一个自引用的typealias来解决这个问题。

 class MyClassWithALongName { typealias CLASS = MyClassWithALongName static let staticFoo = "foo" func someInstanceMethod() -> String { return CLASS.staticFoo } } 

虽然风格指导神可能不赞成。