在Swift类中,静态函数/变量和类函数/变量有什么区别?

34 浏览
0 Comments

在Swift类中,静态函数/变量和类函数/变量有什么区别?

以下代码可以在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 = \"\",就会出现以下提示:

在类中暂不支持存储属性;你是想使用\'static\'吗?

当此功能被支持时,静态变量和类变量(即在类中都定义)之间的区别是什么?该使用哪一个?在什么情况下使用?

(Xcode 6.3)

admin 更改状态以发布 2023年5月24日
0
0 Comments

我在playground上尝试了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(){
    }
    //Let's 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(){
    }
}

0
0 Comments

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

class属性的功能与此类似(子类可以重写它们)。

0