item - swift navigation bar done button



在Swift中的類中訪問靜態變量 (5)

ClassName.staticVaribale 是訪問類中的靜態變量的唯一方法嗎? 我想要一些 self ,但為了上課。 就像 class.staticVariable 一樣。


Answer #1

Swift中有一種方法可以使Marcel的答案甚至滿足大多數挑剔的風格指導之神

struct CustomStruct {          
 static func staticMethod() { ... } 

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

當您要訪問關聯的類型聲明時,這使得Self像在協議中一樣可用。 我不確定Swift 1,因為從未嘗試過,但是在Swift 2中效果很好



Answer #3

在這種情況下,我不喜歡使用typealias方式。 我的解決方法是:

 class MyClass { static let myStaticConst: Int = 1 var myStaticConst:Int { return type(of: self).myStaticConst } func method() { let i:Int = myStaticConst } } 

Answer #4

您可以通過定義自引用類型別名來解決此問題。

class MyClass {
    static let staticProperty = 0
    let property = staticProperty //YES

    class Inner {
        func method() {
            print(staticProperty) //YES
        }
    }

    func method() {
        print(staticProperty) //NO
        print(MyClass.staticProperty) //YES
    }
}

儘管風格指南之神可能不贊成。


Answer #5

看起來在Swift 4.2中,內部類和實例變量可以直接訪問靜態變量而無需類名的前綴。 但是,您仍然需要函數中的類名稱。

class MyClass {

   static let myStaticConst: Int = 1
   var myStaticConst:Int {
      return type(of: self).myStaticConst
   }

   func method() {
      let i:Int = myStaticConst
   }
}




swift