Swift类中的静态vs类函数/变量?

下面的代码在Swift 1.2中编译:

class myClass {
    static func myMethod1() {
    }
    class func myMethod2() {
    }
    static var myVar1 = ""
}

func doSomething() {
    myClass.myMethod1()
    myClass.myMethod2()
    myClass.myVar1 = "abc"
}

静态函数和函数有什么区别? 我应该使用哪一个,什么时候?

如果我尝试定义另一个变量class var myVar2 = "" ,它说:

类尚未支持的类存储属性; 你的意思是'静态'吗?

当这个特性被支持时,一个静态变量和一个变量之间会有什么不同(例如,当两个变量都是在一个类中定义的时候)? 我应该使用哪一个,什么时候?

(Xcode 6.3)


staticclass都将方法与class相关联,而不是类的实例。 不同之处在于子类可以重写class方法; 他们不能覆盖static方法。

class属性在理论上将以相同的方式运行(子类可以覆盖它们),但它们在Swift中不可能。


我尝试了mipadi在操场上的回答和评论。 并想到分享它。 干得好。 我认为mipadi的答案应该被接受。

class A{
    class func classFunction(){
    }
    static func staticFunction(){
    }
    class func classFunctionToBeMakeFinalInImmediateSubclass(){
    }
}

class B: A {
    override class func classFunction(){

    }

    //Compile Error. Class method overrides a 'final' class method
    override static func staticFunction(){

    }

    //Lets avoid the function called 'classFunctionToBeMakeFinalInImmediateSubclass' being overriden by subclasses

    /* First way of doing it
    override static func classFunctionToBeMakeFinalInImmediateSubclass(){
    }
    */

    // Second way of doing the same
    override final class func classFunctionToBeMakeFinalInImmediateSubclass(){
    }

    //To use static or final class is choice of style.
    //As mipadi suggests I would use. static at super class. and final class to cut off further overrides by a subclass
}

class C: B{
    //Compile Error. Class method overrides a 'final' class method
    override static func classFunctionToBeMakeFinalInImmediateSubclass(){

    }
}

关于面向对象 ,答案太简单了:

子类可以覆盖方法,但不能覆盖静态方法。

除了你的帖子之外,如果你想声明一个变量(就像你做了class var myVar2 = "" ),你应该这样做:

class var myVar2:String {
    return "whatever you want"
}
链接地址: http://www.djcxy.com/p/96683.html

上一篇: Static vs class functions/variables in Swift classes?

下一篇: How references to variables are resolved in Python